常见排序算法之插入排序
由这篇博文开始,来回顾一下常见的排序算法。算法实现主要以Python语言为主。
插入排序,对于少量的元素排序,它是一个有效的算法。插入排序的方式有点类似于打扑克牌的时候抓牌后,然后根据牌的大小插入到合适的位置。
插入排序的基本思想:
每步将一个待排序的对象,按其排序码大小,插入到前面已经排好序的一组对象的适当位置上,直到对象全部插入为止。
插入排序的工作过程的伪代码表示
1 | INSERTION-SORT(A) |
插入排序的Python代码实现
1 | # -*- coding:utf-8 -*- |
运行结果:
1 | 第1次插入: [2, 5, 4, 6, 1, 3] |
通过结果可以很清楚的看到每次排序过程。
插入排序算法的分析
- 最好的情况下,排序前对象已经按照要求有序。比较次数:n-1;移动次数:0。对应的时间复杂度为O(n)
- 最坏的情况下,排序前对象为要求的顺序的反序。第i趟时第i各对象必须与前面i个对象都做排序码比较,并且每做一侧比较就要做一次数据移动。时间复杂度为O(n2)
- 如果记录是随机的,时间复杂度为O(n2)
插入排序算法的特点
- 它是稳定排序,不改变相同元素原来的顺序
- 它是in-place排序,只需要O(1)的额外内存空间
- 它是在线排序,可以边接收数据边排序
- 它跟我们排扑克牌的方式相似
- 对小数据集是有效的