算法 - 排序复习

基本插入排序

插入排序是面向链表结构的排序方法

插入排序的基本思想:

对于数组arr = [a0, a1, a2, ... , an]

  1. 从i=0开始,排好序的集合是{a0}
  2. 假设0-i个元素已经有序,有序集合是{a0, a1, ..., ai}
  3. 取第ai+1个元素,将其与有序集合从ai开始向前依次比较,直到遇到比ai小的元素aj
  4. 将ai插入链表中aj元素后
  5. 第an个元素插入后{a0, ... ,an}集合是已经排好序的了

盗一张非常形象的动图:

 

快速排序

快速排序是对冒泡排序的一种改进

  1. 设置两个变量i、j,开始时,i=0,j=n-1
  2. 以第一个数组元素作为key,即key=a[0]
  3. 从j开始向前搜索,找到第一个小于key的值a[j],互换a[j]和a[i]
  4. 从i开始向后搜索,找到第一个大于key的值a[i],互换a[j]和a[i]
  5. 直到i==j时,第一次排序完成,此时key位置前面的数字都小于key,后面的数字大于key
  6. 对key前面的区间和后面的区间再分别进行排序,直到所有递归区间全部排序完成

盗一张维基百科的图:

 

posted @ 2018-03-14 14:19  liutianchen  阅读(191)  评论(0编辑  收藏  举报