插入排序--python实现

插入排序法介绍:

插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。

插入排序法思想:

插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。

插入排序思路图:

在这里插入图片描述

具体实现

看了前面的介绍,相信你已经对插入排序有了初步的认识,用我们的话来说就是跟扑克牌排序几乎是一个道理。首先,你先需要假设第一个位置作为插入位置。其次你要把第二个位置的数跟第一个数比较,若小于第一个数,则找到了插入位置,进行插入操作。

import time
import random

arr = [0 for i in range(8000)]
for i in range(8000):
    arr[i]=random.randint(0,8000)

#arr=[101,34,119,1]
print(arr)
def InsertSort(arr):
    
    insertValue=0
    insertIndex=0
    for j in range(1,len(arr)):
        #No1定义待插入的的数的下标和值
        insertValue = arr[j] #变量定义不要循环内部
        insertIndex = j-1
        
        #No2寻找插入的位置
        while insertIndex>=0 and insertValue < arr[insertIndex]:
            #左移insertIndex
            arr[insertIndex+1] = arr[insertIndex]#前面的数字后移
            insertIndex -= 1#插入下标左移
        #No3
        if insertIndex + 1 != j:
            arr[insertIndex+1] = insertValue

print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))
InsertSort(arr)
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))
print(arr)
        

运行结果
在这里插入图片描述
如果数据量到达8000后,排序需要5秒时间。如果你看了我的其他排序博客,你会发现插入排序还算比较有效率。但是其实排序的时间复杂度也是O(n^2),这是最坏的情况,但其平均情况下的关键字比较次数和对象移动次数约为 n 2 /4.所以花费的时间较短。

发布了27 篇原创文章 · 获赞 2 · 访问量 680

猜你喜欢

转载自blog.csdn.net/qq_44273739/article/details/105208000