插入排序 | 通俗易懂的理解排序过程

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_44915703/article/details/100512584

插入排序,比我想象中简单。

❤️如果你想了解其他排序,

冒泡排序 | 通俗易懂的理解排序过程
简单选择排序 | 通俗易懂的理解排序过程
快速排序 | 通俗易懂的理解排序过程


1. 实现过程

看看插入排序,是如何「插入」的吧!
在这里插入图片描述


2. 关键思路

「插入排序」也是一轮一轮的 —— 每一轮确定1个target的位置

具体操作:

  1. 默认第一位数已排序,从第2位起,每一轮确定一个target,作为插入对象;
  2. target与其前面的数依次比较
  3. 若target大于被比较的数,则后移被比较的数,腾出相应位置;
  4. 将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)。

猜你喜欢

转载自blog.csdn.net/weixin_44915703/article/details/100512584