【python & 插入排序算法】

【python & 插入排序算法】

1、原理特点

  • 插入排序维持一个已排好序的子列表,其位置始终在列表的前部,然后逐步扩大这个子列表直到全表。
  • 插入排序的比对主要用来寻找“新项”的插入位置。

原理图:
在这里插入图片描述>思路:在这里插入图片描述

  • 第1趟,子列表仅包含第1个数据项,将第2个数据项作为“新项”插入到子列表的合适位置中,这样已排序的子列表就包含了2个数据项。
  • 第2趟,再继续将第3个数据项跟前2个数据项比对,并移动比自身大的数据项,空出位置来,以便加入到子列表中
  • 经过n-1趟比对和插入,子列表扩展到全表,排序完成。

2、简单排序代码



'''
@ time :2021年10月21日
@ author : wupke
@ description: 插入排序算法
'''


import time

# # #    
start1 = time.clock()

def insertionSort(alist):

    for index in range(1,len(alist)):
            # 从列表的第二项开始,算 新项/插入项
        currentvalue = alist[index]
        position = index
        # 对比移动
        while position > 0 and alist[position-1] > currentvalue: 
            alist[position]=alist[position-1]
            position = position-1
        # 插入新项
        alist[position]= currentvalue

alist = [22,33,44,55,21,31,45,76,88,54,3,5,7,2]
insertionSort(alist)
print(alist)
end1 = time.clock()
print("%s排序用时%s" %(alist,(end1-start1)))



3、复杂度分析

  • 最差情况是每趟都与子列表中所有项进行比对,总比对次数与冒泡排序相同,数量级仍是O(n2)
  • 最好情况,列表已经排好序的时候,每趟仅需1次比对,总次数是O(n)

猜你喜欢

转载自blog.csdn.net/Kefenggewu_/article/details/120896146
今日推荐