插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 [1] 。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。
插入排序就类似于玩扑克时摸牌的情形。还是以[2,5,3,1,6]为例。
2和5比较,5比2大,不变。此时的数组为[2,5,3,1,6]
3和5、2进行比较,比5大,比2小,放到2和5中间,此时的数组为[2,3,5,1,6]
1和前面的元素2,3,5进行比较,放到2的前面。此时的数组为[1,2,3,5,6]
6和前面的元素1,2,3,5进行比较,比它们大,位置不变。此时的数组为[1,2,3,5,6]
代码
#第一种
def insert_sort(li):
for i in range(1,len(li)-1):#假设第一个元素为有序数组
for j in range(i,0,-1):
if a[j]<a[j-1]:
a[j-1],a[j] = a[j],a[j-1]
return li
#第二种
def insert_sort(li):
for i in range(1,len(li)-1): #假设第一个元素为有序数组
tmp = li[i]
j = i-1 #已有序的数组的最后一个元素
while j>=0 and tmp<li[j]:
li[j+1] = li[j]
j-=1
li[j+1] = tmp
return li
li = [2,5,3,1,6]
print(insert_sort(li))