每次将一个待排序的记录,按其大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。时间复杂度 T(n) = Θ(n²)。
原理及实现
基本原理:对待排序数组a[n],假设第i(i∈[1,n])个元素左侧已排序,右侧未排序。
- ① 从i位置左侧已排序数组位置中,逆序遍历,查找元素a[i]的目标位置,即第一个比a[i]小的元素后边targetPos(或者第一个位置)。
- ② 移动元素:将数组元素[targetPos + 1 .. i - 1] 整体向后移动一位。
- ③ 将第i(i∈[1,n])个元素a[i]放置到[targetPos + 1]位置。
- ④ 遍历执行①、②、③操作,直到最后一个元素a[n]。
使用Swift进行功能实现,如下:
|
|
测试用例及结果
|
|
|
|