本文参考bobo老师的教学视频。
O(n^2)的算法
1. 选择排序
每次选最小的元素,放到前面排序部分的最后一个位置
2. 插入排序
每次从未排序部分取第一个元素,不断向前面排好序里的元素比大小+交换,直到插入合适位置
缺点:频繁交换位置,交换操作耗时
改进:前面排序部分后移,直到找到合适位置再将元素放入
优点:在近乎有序的时候,插入效果近似O(n)
3. 希尔排序(插入的改进)
出发点:插入在近乎有序的时候很快,所以希尔先在大跨度上排序,然后逐渐减小步长
4. 冒泡排序
O(nlogn)的算法
1. 归并排序
自定向上:从上到下分割,然后排序
自底向上:初始每2个元素一组排序,接着4个…
对比:
1)递归自顶向下稍快一些
2)自底向上适合用于链表(因为不需要直接访问)
2. 快速排序
2种思路:
1)前面记录小于key的元素,中间记录大于key,后面是未遍历的。