前言
最简单的排序算法之一是插入排序(insertion sort)。
思路
插入排序的思路是这样的:
插入排序:由N-1趟排序完成,对于i=1到N-1趟,保证从位置0到位置i上的元素为已排序状态(但不保证已排序的值一定小于未排序的值)。
过程:
- 对于位置i,先把i位置的值保存起来,然后把i挖空。
- 依次与前一个位置比较,比较i-1到0位置上的元素;
- 若发现i对应的值小于某个位置的值,则将该位置的值往后移动一位;
- 最后将tmp填入空位
整个过程就是一个不停的往前插的过程,因此叫插入排序
我们对数列:[2, 12, 6, 15, 8] 进行插入排序
其中,i=1和i=3趟都没发生交换。
代码
复杂度和稳定性
- 时间复杂度假设被排序的数列中有N个数。遍历一趟的时间复杂度是O(N),需要遍历多少次呢?N-1次,因此,插入排序的时间复杂度是
- 插入排序稳定性直接插入排序是稳定的算法,它满足稳定算法的定义。
- 假设在数列中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面;并且排序之后,a[i]仍然在a[j]前面。则这个排序算法是稳定的!