Python 3 实现插入排序

直接插入排序(Straight Insertion Sort)是一种最简单的排序方法,其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1的有序表。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。排序的基本思路是:每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。通俗的说:从一组数第一个元素开始,将数组分为有序序列和无序序列,每循环一次,无序序列的一个元素插入到有序序列中,有序序列增加一,直至无序序列元素全部存在于有序序列中。

算法原理:

     1. 设定判别条件(确定规则:从小到大或从大到小)。

     2. 确定有序序列和无需序列。

     3. 循环将无序序列插入到有序序列中,组成新的有序序列。

     4. 直到最后一个元素。

算法实现:

#插入排序
def Insert_Sort(list2):
    for i in range(1,len(list2)): #从第二个元素开始
        for j in range(i,0,-1):
          if list2[j] < list2[j-1]:#判断是否为交换,如果前者大于后者,则交换
              print(list2)
              list2[j],list2[j-1] = list2[j-1],list2[j]
    print('插入排序:', end=' ')
    print(list2)
#主函数
if __name__ =='__main__':
    List_value =np.random.randint(200, size=10)
    print('随机列表:',end = '')
    print(List_value)
    #冒泡排序
    #Bubble_Sort(List_value)
    # 选择排序
    # Selection_Sort(List_value)
    # 插入排序
    Insert_Sort(List_value)

效果显示:


时间复杂度:

如果把n个元素的序列升序排列,那么采用插入排序存在最好情况和最坏情况。最好情况就是,序列已经是升序排列了,在这种情况下,需要进行的比较操作需(n-1)次即可。最坏情况就是,序列是降序排列,那么此时需要进行的比较共有n(n-1)/2次。插入排序的赋值操作是比较操作的次数加上 (n-1)次。平均来说插入排序算法的时间复杂度为O(n^2)。因而,插入排序不适合对于数据量比较大的排序应用。

 

算法稳定性:

           插入排序是在有序序列的基础上,一次插入一个元素。当然,刚开始这个有序的小序列只有1个元素,就是第一个元素。比较是从有序序列的末尾开始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置。如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以插入排序是稳定的。

 

猜你喜欢

转载自blog.csdn.net/qq_33356563/article/details/83956913
今日推荐