排序算法之插入排序

Posted shenjianping

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法之插入排序相关的知识,希望对你有一定的参考价值。

一、原理

将序列分为有序区和无序区两个部分,刚开始有序区只有一个元素,每次从无序区选择一个元素插入到有序区的位置,直到无序区为空。

关键点:

  • 插入到有序区时遵循从后向前进行扫描,然后将无序区的元素插入。
  • 此时无序区的第一个元素作为有序区的第一个元素

技术图片

二、实现

def insert_sort(li):

    for i in range(1,len(li)): #对无序区的元素进行循环,i表示第一个元素的下标,因为有序区已经有一个元素了
        temp=li[i] #将无序区取出的元素进行保存
        j=i-1 #是有序区的最后一个位置下标
        while j>=0 and li[j]>temp: #j表示有序区的元素
            li[j+1]=li[j] #将有序区的元素向后移动,因为从无序区已经取出一个元素,空了一个位置
            j-=1 #有序区的元素继续向前循环比较
            
        #将无序区的元素插入到有序区
        li[j+1]=temp  

l=[3,5,2,9]
insert_sort(l)
print(l) #[2, 3, 5, 9]

总结:

  • 有序区已经有一个元素,第一层循环无序区是从第二个元素开始
  • 无序区的元素需要保存,防止被覆盖
  • while循环无序区从后向前
  • 有序区需要元素后移以便无序区的元素插入

 原文:https://github.com/hustcc/JS-Sorting-Algorithm/blob/master/3.insertionSort.md

以上是关于排序算法之插入排序的主要内容,如果未能解决你的问题,请参考以下文章

数据结构之排序算法Java实现—— 插入类排序之折半插入排序算法

插入排序算法初学算法之排序--直接插入排序

排序算法之冒泡选择插入排序(Java)

排序算法之冒泡选择插入排序(Java)

排序算法之插入排序

排序算法之直接插入排序