仿真——算盘排序

  冒泡排序,是模仿鱼吐泡沫是的样子,大泡泡先浮出水面,小泡泡浮的比较慢。

  今天在看冒泡排序的时候,突然想到模仿算盘的样子做排序。

  首先把待排序的每个数字看作算盘的一排珠子,珠子的个数代表这个数字的大小。假设算盘倾斜的时候,珠子会发生侧移。那么当算盘倾斜的时候,第一排珠子的数量肯定是最多的,第二排珠子的数量次多,……,依此顺序,算法上的珠子呈现一个由左至右递减的顺序。

  比如,第一排珠子的数量为2,第二排珠子的数量为6,第三排珠子数量为3。当算盘向左倾斜的时候,第二排的第四颗(从上到下数)珠子会向左移动,这时第二排有2颗珠子,第一排有6颗珠子;第三排的第一颗珠子向第二排珠子移动,这时第三排有2颗珠子,第二排有3颗珠子;第一排珠子的数量大于第二排,所以不用再移动了。如下图所示:

有谁能实现的……

时间: 2024-08-14 06:49:04

仿真——算盘排序的相关文章

排序算法三:堆排序(Heapsort)

堆排序(Heapsort)是一种利用数据结构中的堆进行排序的算法,分为构建初始堆,减小堆的元素个数,调整堆共3步. (一)算法实现 1 protected void sort(int[] toSort) { 2 buildHeap(toSort); 3 for (int i = toSort.length - 1; i > 0; i--) { 4 CommonUtils.swap(toSort, 0, i); 5 adjustHeap(toSort, 0, i); 6 } 7 } 8 9 /**

珠排序Bead Sort

珠排序非常另类[地精也很另类],看完你就知道了,先介绍思路,再分解过程 这是它的英文论文 http://www.cs.auckland.ac.nz/~jaru003/research/publications/journals/beadsort.pdf 截图即从上边的论文里抓的屏 先了解一个概念,不然不容易理解,一个数字3用3个1来表示 一个数字9用9个1来表示,珠排序中的珠指的是每一个1,它把每一个1想像成一个珠子,这些珠子被串在一起,想像下算盘和糖葫芦 图1 上图1中的三个珠就表示数字3,两

排序算法四:快速排序(Quicksort)

快速排序(Quicksort),因其排序之快而得名,虽然Ta的平均时间复杂度也是o(nlgn),但是从后续仿真结果看,TA要比归并排序和堆排序都要快. 快速排序也用到了分治思想. (一)算法实现 1 protected void quicksort(int[] array, int first, int last) { 2 3 int pivot = array[first]; 4 int i = first; 5 int j = last - 1; 6 boolean serachBig =

排序算法二:归并排序(Merge sort)

归并排序(Merge sort)用到了分治思想,即分-治-合三步,算法平均时间复杂度是o(nlgn). (一)算法实现 1 private void merge_sort(int[] array, int first, int last) { 2 if (first + 1 < last) { 3 int mid = (first + last) / 2; 4 merge_sort(array, first, mid); 5 merge_sort(array, mid, last); 6 7 /

排序算法七:基数排序(Radix sort)

上一篇提到了计数排序,它在输入序列元素的取值范围较小时,表现不俗.但是,现实生活中不总是满足这个条件,比如最大整形数据可以达到231-1,这样就存在2个问题: 1)因为m的值很大,不再满足m=O(n),计数排序的时间复杂也就不再是线性的: 2)当m很大时,为计数数组申请的内存空间会很大: 为解决这两个问题,本篇讨论基数排序(Radix sort),基数排列的思想是: 1)将先按照某个基数将输入序列的每个元素划分成若干部分,每个部分对排序结果的影响是有优先级的: 2)先按低优先级排序,再按高优先级

排序算法五:随机化快速排序(Randomized quicksort)

上一篇提到,快速排序的平均时间复杂度是O(nlgn),比其他相同时间复杂度的堆排序.归并排序都要快,但这是有前提的,就是假定要排序的序列是随机分布的,而不是有序的.实际上,对于已经排好的序列,如果用快速排序时间复杂度是O(n2).为应对这样的有序序列,于是出现了本篇要讲的随机化快速排序(Randomized quicksort). 快速排序在选主元(pivot)时,总是选择第一个:随机化快速排序的思想是,随机从序列中选择一个作为主元. (一)算法实现 1 protected void quick

经典排序算法 - 珠排序Bead Sort

经典排序算法 - 珠排序Bead Sort 珠排序非常另类[地精也很另类],看完你就知道了,先介绍思路,再分解过程 这是它的英文论文 http://www.cs.auckland.ac.nz/~jaru003/research/publications/journals/beadsort.pdf 截图即从上边的论文里抓的屏 先了解一个概念,不然不容易理解,一个数字3用3个1来表示 一个数字9用9个1来表示,珠排序中的珠指的是每一个1,它把每一个1想像成一个珠子,这些珠子被串在一起,想像下算盘和糖

一堆乱七八糟绝不正经的排序算法

原文 索引 猴子排序 钻石排序(戴蒙德排序) 恶魔排序 珠排序 地精排序(怂货排序) 智能设计排序 1. 猴子排序 (提供者cy1306110516) 猴子排序的思想源自于著名的无限猴子定理. 既然猴子们能敲出<哈姆雷特>,区区排序又算什么呢? 思路: 判断数组是否有序,如果无序,进入下一步. 随机打乱数组,回到上一步. 适用人群: 欧皇 时间复杂度: 最坏情况O(∞) 最好情况O(n) 算法实现: 1 #include <bits/stdc++.h> 2 using namesp

PAT 1109 Group Photo[仿真][难]

1109 Group Photo(25 分) Formation is very important when taking a group photo. Given the rules of forming K rows with N people as the following: The number of people in each row must be N/K (round down to the nearest integer), with all the extra peopl