冒泡排序
思想:
依次比较相邻两项的大小,顺序有误则交换,每遍历一次,最大的数就会冒到最后,遍历n-1次可得到顺序的数组
代码:
|
|
选择排序
思想:
选择待排序列中最小的一项,放在序列的起始位置,然后缩短序列的长度,直到序列的长度为1
代码:
|
|
插入排序
思想:
构建有序序列,对未排序的数,在已排序的序列中,从后向前扫描,找到相应位置并插入
代码:
|
|
希尔排序
思想:
把数组按下标进行一定的增量分组,对分组进行插入排序,减小增量,再次排序,直到增量为0
如增量为2,则arr[0],arr[2],arr[4]…为一组,arr[1],arr[3],arr[5]…为一组
代码:
以初始增量为n/2为例
归并排序
思想:
分而治之,我们会把两个有序的数组合成一个有序数组,所以可以把一个乱序的数组,分解为若干有序数组,再依次合并成一个有序数组
代码:
|
|
|
|
快速排序
思想:
以一个数为基准,把比之小的数放在左边,比之大的数放在右边,然后对左右区间进行递归操作,直到区间只有一个数。
代码:
|
|
方法一步骤
1.每次取第一个元素为基准为例,配合两个下标,左下标,右下标,记录初始值
2.先从后到前扫描,扫描到比基准小的数后,左下标对应的值替换为此数(最开始,左下标对应的数就是基准)
3.再向从前向后扫描,扫到比基准大的数后,右下标对应的值替换为此值
4.直到左右下标扫描到一个地方,此地方即为基准应该在的位置,把基准放到此位置。然后对左右区间进行递归操作。
方法二步骤
1.每次取第一个元素为基准为例,配合两个下标,左下标,右下标,记录初始值
2.先从后到前扫描,扫描到比基准小
3.再向从前向后扫描,扫到比基准大
4.交换前后两个不符合顺序的元素
4.直到左右下标扫描到一个地方,此地方即为基准应该在的位置,把基准放到此位置。然后对左右区间进行递归操作。
堆排序
思想:
根据二叉堆的数据结构来实现,将数组构造成最大堆
二叉堆
- 二叉堆近似为完全二叉树
- 父节点的值总是大于等于子节点
- 二叉堆的数组存储

步骤:
1.将数组映射成一棵树,调整数组使之对应一个二叉堆
2.把二叉堆的根元素放在数组最后,将剩余元素重新构造成一个二叉堆
3.重复步骤2,直到顺序都对了
代码:
|
|
|
|