排序算法:插入排序(python写法)

插入排序:

类似于打扑克牌时我们抽牌,每抽到一张牌,就将这张牌插入到手牌指定位置。 有序区 无序区。 有序区就是已经排好序的区域(你手里已经有的牌)。 无序区就是没有排序的区域(牌堆) 每次抽到牌之后,对有序区进行一次类似冒泡的处理,从右向左进行冒泡,直到牌插入到了正确位置。 时间复杂度:O(n^2) 空间复杂度:O(1) 重点:理解有序区和无序区的概念,以及:1个元素自身是有序的。

算法的两个基础概念:O(n) 空间复杂度:所使用的算法占用的内存空间。O(1):没有新开辟的内存空间。O(n):新开一个长度为n的列表或者是其他的数据结构。 时间复杂度:所使用的算法消耗的时间的长度。O(n):对一个长度为n列表进行一次完全的遍历。O(n^2):对一个列表进行嵌套的两次循环。

插入排序(python代码):

import random

li1 = [random.randint(0, 9) for i in range(10)]

def insert_sort(li):

for i in range(1,len(li)) :

while li[i] < li[i-1] and i>0 :

li[i-1],li[i] = li[i],li[i-1]

i -= 1

return li

print(li1)

print(insert_sort(li1))

插入排序注释:

def insert_sort(li):#插入排序

for i in range(1,len(li)):#li[0]只有一个元素,所以他一定是有序的,所以我们从第二个元素开始循环

k=i#初始化一个需要排序的元素的指针。

j=i-1#初始化一个指向有序区最后一个元素的指针。

while li[k]<li[j] and j>=0:#如果我们取出来的数比前面的数字小,则双方交换位置,继续循环。j>=0防止数组越界

li[k],li[j]=li[j],li[k]#交换两个相邻元素。

k-=1

j-=1#把kj通通向左挪一位。

经验分享 程序员 微信小程序 职场和发展