简单易理解、稳定排序算法,核心:“摸牌遍历,末位插入”。
本文参考3W学习方法来叙述内容。
一、What
1、什么是插入排序?
插入排序(Insertion Sort),也被称为直接插入排序,将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。–引自《百度百科》
二、Why
1、为什么需要掌握插入排序?
应对如下排序场景:已经有部分数据已经排好,并且排好的部分越大越好。
三、How
1、插入排序的原理?
现有一个数组,包含n个元素(n > 1),进行排序
- 【摸牌遍历】:索引0默认已在手中(已排序数组),开始从剩余的元素中摸牌(索引1至n-1的待排序数组)。
- 【末位插入】:从已排序数组的末位反向遍历,与摸到的牌比较后判断是否向后挪位。
2、插入排序的时间复杂度?
n个元素比较(n > 1),进行的总比较次数计算(最坏情况):
1 + 2 + ... + (n-2) + (n-1)
= (n-1+1)*(n-1)/2
= n(n-1)/2
所以时间复杂度为:O(n^2)