- 1.对于一个数组,冒泡排序算法会比较相邻的两项的大小,并进行换。
- 2.对每一对相邻的元素做同样的调整,如:第一个和第二个,第二和第三个,第三个和第四个等等,以此类推。这样下来,最后的素会是最大的。
- 3.重复以上步骤。如果有n个元素,则第一次循环进行n-1次,第二循环进行n-2次,…………,第n-j次循环过后,会按大小顺序排出j较大的数。
- 4.持续以上的步骤,直到没有任何一堆数字需要比较。
- 先对数组从左到右进行冒泡排序(升序),则最大的元素去到最右端
- 再对数组从右到左进行冒泡排序(降序),则最小的元素去到最左端
- 以此类推,依次改变冒泡的方向,并不断缩小未排序元素的范围,直到最后一个元素结束
插入排序的工作方式像许多人排序一手扑克牌。开始时,我们的左手为空并且桌子上的牌面向下。然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置。为了找到一张牌的正确位置,我们从右到左将它与已在手中的每张牌进行比较。拿在左手上的牌总是排序好的,原来这些牌是桌子上牌堆中顶部的牌
3.3.2 界面效果 3.4. 选择排序:DoubleBubbleSort 3.4.1. 选择排序的原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
重复第二步,直到所有元素均排序完毕。
3.4.2. 界面效果 3.5. 基数排序:RadixSort LSD 3.5.1 基数排序的原理:属于“分配式排序”(distributionsort),基数排序法又称“桶子法”(bucketsort)或binsort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O(nlog®m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的比较性排序法,同时基数排序分最高位优先"(MSD)法和最低位优先"(LSD)法。
3.5.2. 代码效果 3.6. 快速排序:QuickSort 3.6.1. 快速排序的原理:快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用
快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。
该方法的基本思想是:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
虽然快速排序称为分治法,但分治法这三个字显然无法很好的概括快速排序的全部步骤。因此我的对快速排序作了进一步的说明:挖坑填数+分治法:
- 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
- 设定两个指针,最初位置分别为两个已经排序序列的起始位置
- 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
重复步骤3直到某一指针超出序列尾
将另一序列剩下的所有元素直接复制到合并序列尾
希尔排序是将待排序的数组元素 按下标的一定增量分组 ,分成多个子序列,然后对各个子序列进行直接插入排序算法排序;然后依次缩减增量再进行排序,直到增量为1时,进行最后一次直接插入排序,排序结束。
3.8.2. 界面效果


