版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
插入排序,比我想象中简单。
❤️如果你想了解其他排序,
《冒泡排序 | 通俗易懂的理解排序过程》
《简单选择排序 | 通俗易懂的理解排序过程》
《快速排序 | 通俗易懂的理解排序过程》
1. 实现过程
看看插入排序,是如何「插入」的吧!
2. 关键思路
「插入排序」也是一轮一轮的 —— 每一轮确定1个target的位置。
具体操作:
- 默认第一位数已排序,从第2位起,每一轮确定一个target,作为插入对象;
- target与其前面的数依次比较;
- 若target大于被比较的数,则后移被比较的数,腾出相应位置;
- 将target插入空位。
简单总结 —— 确定target、比较、后移、腾位置、插入。
其实,后移,就是把当前的数替换下一个位置的数,达到后移的效果。
插入,也只是,把target替换空位的数,达到插入的效果。
序列的长短一直都是不变的,也不需要引入指针啊下标啊什么的移动。
3. 代码实现
def InsertSort(arr):
n = len(arr)
if n <=1 :
return arr
for i in range(1, n): # 默认第一个数已排序,从第二个元素开始
j = i
target = arr[i] # 待插入的对象
while j > 0 and arr[j-1] > target: # 比较、后移、腾位置
arr[j] = arr[j-1]
j -= 1
arr[j] = target #把target插入到空位
return arr
4. 结合代码和过程,再体会一次
5. 评价
- 每轮操作O(n)次,共O(n)轮,时间复杂度O(n^2)。
- 额外空间开销出在数据后移时那一个过渡空间,空间复杂度O(1)。