八大排序算法的python实现(一)直接插入排序

时间:2023-12-20 15:57:38

刚参考网上的以及书上的资料把这八大算法又复习了一遍,感悟就是:有些算法原理真的很简单,一看就懂,但实现起来总是有这样那样的问题。

闲言少叙,先贴代码,之后再以自己的理解,以及自己在理解与实现的过程中遇到的坑,以自己的话记录下来。为了以后复习的方便,也可能给遇到同样坑的人提供些许的思路!

#coding:utf-8
#author:徐卜灵
#1.直接插入排序
L = [1, 3, 2, 32, 15, 5, 4]
def Insert_sort(L):
for i in range(1,len(L)):
for j in range(0,i):#这里面其实也是从前向后比较
if L[i]<L[j]:
L.insert(j,L[i])#在不大于的位置插入L[i],这个时候,列表加长了1位,L[i]插入到指定位置了,但它的值也向后移动了一位
L.pop(i+1)#把原来L[i]的值删除。
print L
#空间复杂度为O(1),时间复杂度为O(n*n)
Insert_sort(L)
# print sorted(L)#自带的两种排序
# L.sort()
# print L

思路:直接插入排序是比较简单的算法了。需要注意的是,L.insert(j,L[i])这样在适当的位置插入了L[i],同时j后面的元素都往后移动了一位,原来的L[i] 变成了L[i+1],仍然在列表里,所以有一步删除的操作。

这里L.insert(j,L[i]) 和L.pop(i+1)是理解整个算法的关键。

所以算法的空间复杂度为O(1)

时间复杂度,从程序中可以看出循环里嵌套了一层循环,所以为O(n ** 2).

此算法为稳定排序算法。