一,简单排序
冒泡排序:依次比较相邻两个元素,如果左边比右边大则交换两个元素,这样就能找到最大的数;
固定最大的数,对其他数重复以上过程。
选择排序:对所有数遍历找到最大的数(使用变量记录),将其与最右边的数交换;
固定最大的数,对其他数重复以上过程。
插入排序:将无序的数插入至有序的数组中,第一个数为有序,右边的数依次进行插入;
需要插入的数从有序数组右往左比较,进行冒泡找到合适的位置。
二、高级排序
希尔排序:插入排序升级版,减小增量排序。初始状态在宏观上是有序的,只需要微调。
将数组分为h(提前设置好增量因子)组进行插入排序;
缩小h,重复以上过程。
排序时只需要 i 从h到 length 遍历,比较 array[i] 和 array[i-h] 的值
归并排序:分治思想,分组递归排序,再进行有序归并。
归并时使用辅助数组进行储存,结束后复制回原数组。
快速排序:分治思想,以参照值将数组分为两部分,左侧小于参照值,右侧大于;
再将这两部分取参照值继续分组,直到最后小组排好序整个数组也就排好了序。
分组方法:通过两个指针向中移,左指针遇到大于参照值停,右指针遇到小于参照值停,交换;
继续移动直到两指针重合,将参照值与指针位置交换,完成分组。
算法复杂度与稳定性分析: