基本插入排序
插入排序是面向链表结构的排序方法
插入排序的基本思想:
对于数组arr = [a0, a1, a2, ... , an]
- 从i=0开始,排好序的集合是{a0}
- 假设0-i个元素已经有序,有序集合是{a0, a1, ..., ai}
- 取第ai+1个元素,将其与有序集合从ai开始向前依次比较,直到遇到比ai小的元素aj
- 将ai插入链表中aj元素后
- 第an个元素插入后{a0, ... ,an}集合是已经排好序的了
盗一张非常形象的动图:
快速排序
快速排序是对冒泡排序的一种改进
- 设置两个变量i、j,开始时,i=0,j=n-1
- 以第一个数组元素作为key,即key=a[0]
- 从j开始向前搜索,找到第一个小于key的值a[j],互换a[j]和a[i]
- 从i开始向后搜索,找到第一个大于key的值a[i],互换a[j]和a[i]
- 直到i==j时,第一次排序完成,此时key位置前面的数字都小于key,后面的数字大于key
- 对key前面的区间和后面的区间再分别进行排序,直到所有递归区间全部排序完成
盗一张维基百科的图: