方法 | 理解 |
---|---|
冒泡 | 每一趟安排最大值,与相邻值交换 |
选择 | 每一趟选出最小值,交换到最小位置 |
插入(希尔) | 1. 插入当前值到应该的位置,保证前面序列的有序性 2. 希尔是跨gap的插入排序 |
归并 | 分解为最小粒度,然后分组排序 |
快速 | 1. 当前值为标杆,左为小,右为大,并且安排到应该的位置上去 2. 递归 |
桶 | O(1) |
计数 | O(1) |
基数 | O(1) |
1. 冒泡
2. 选择
比较次数 N^2/2
交换次数 N
数据移动最少
3. 插入(希尔排序)
最坏情况下需要N^2/2次比较和N^2/2次交换,最好情况下需要N-1次比较和0次交换。
平均情况下需要N^2/4次比较和N^2/4次交换
4. 归并
典型的分治
5. 快速排序
定基准,小在左,大在右
原地快排:
-
one index for partition:最坏时间为O(n^2),可以理解为每次基准都要从头到尾遍历确定位置
-
two-way partition: 最坏时间为O(nlogn),可以理解为每次基准是从两侧夹击确定位置
比较数据:
6. 桶排序
将值先按区间划分在不同的桶中,每个桶排序(插入)后合并
7. 计数排序
速度快于比较排序算法
反向填充,保持稳定性
8. 基数排序
从后向前,对每一位数字进行入桶、合并