直接插入排序算法思想:
每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
range:
range是左闭右开
for i in range(5):
print(i)
输出1 2 3 4
直接插入排序代码实现:
def insert_sort(alist):
n=len(alist)
for j in range(1,n):
for i in range(j):
if alist[i] > alist[j]:
alist[j],alist[i]=alist[i],alist[j]
#return alist
if __name__ =="__main__":
alist=[0,1,8,7,9,2,10]
print(alist)
insert_sort(alist)
print(alist)
此方法是每次都和前面的第一个进行比较,如果前面的大,那么交换,如果一直不大,那么其在原位置不动。其中每次交换后
def insert_sort(alist):
n=len(alist)
for j in range(1,n):
for i in range(j,0,-1):
if alist[i] < alist[i-1]:
alist[i],alist[i-1]=alist[i-1],alist[i]
#return alist
if __name__ =="__main__":
alist=[0,1,8,7,9,2,10]
print(alist)
insert_sort(alist)
print(alist)
最常见的是此种方法,每次都是把要比较的那个和前面那个进行比较,如果比前面那个小,则进行交换,一直到和第一个比较完毕。这里不懂的地方是怎么从后往前来用Python书写,其(j,0,-1)从 j 开始到 1 步长 -1
def insert_sort(alist):
n=len(alist)
for j in range(1,n):
i=j
while i > 0:
if alist[i] < alist[i-1]:
alist[i],alist[i-1]=alist[i-1],alist[i]
i-=1
else:
break;
#return alist
if __name__ =="__main__":
alist=[0,1,8,7,9,2,10]
print(alist)
insert_sort(alist)
print(alist)
while方法写直接插入排序
range用法巩固
- range(9) 为0~8的有序集合
- range(start,stop,[step]) start表示数字的开始值,stop代表数字的结束值,step代表循环时数字递增的步长(默认值为1)