【python练习题】冒泡排序 和插入排序 ,list的应用

题目一 冒泡排序 由小到大的顺序

 1 '''第一个是自己写的
 2 temLst=[1,3,53,6,7,35,63,6,4,7,5,6,7,34]
 3 第一趟比较后,找到最小的数,且放在第一位,始终拿【0】与其余比较
 4 第二趟比较时,始终拿【1】与其他后面的比较
 5 '''
 6 #for i in temLst:  要用下标,感觉while更顺手 (自己写的) 循环次数比下面的多一些哦
 7 temLst=[1,3,53,6,7,35,63,6,4,7,5,6,7,34]
 8 n=len(temLst)
 9 i=0
10 j=0
11 count=0  #循环了121次
12 while i<(n-1):
13     j=i+1
14     while j<=(n-1):
15         count = count + 1
16         if temLst[i]>temLst[j]:
17             temLst[i],temLst[j]=temLst[j],temLst[i]
18         else:
19             j=j+1
20     i=i+1
21 print('自己写的count循环次数;',count)

冒泡排序:

# 通过打印循环次数也比较,谁更高效
#for循环写冒泡排序 temLst=[1,3,53,6,7,35,63,6,4,7,5,6,7,34] n=len(temLst) for i in range(n): for j in range(n-i-1): if temLst[j]>temLst[j+1]: #目标是j+1 是大一点的, temLst[j],temLst[j+1]=temLst[j+1],temLst[j] # print(temLst) #冒泡排序,用while来写 temLst=[1,3,53,6,7,35,63,6,4,7,5,6,7,34] n=len(temLst) i=0 count1=0 #循环了91次 while i<n-1: j=0 while j<n-i-1: count1=count1+1 if temLst[j]>temLst[j+1]: #目标是j+1 是大一点的, temLst[j],temLst[j+1]=temLst[j+1],temLst[j] j=j+1 i=i+1 print('冒泡排序循环次数:',count1)

题目二 插入排序 适用于少量数据的排序

方式一:采用insert pop的方式

 1 temLst=[1,3,53,6,7,35,63,6,4,7,5,6,7,34]
 2 n=len(temLst)
 3 count2=0  #循环67次
 4 for i in range(1,n): #i in range(n)  取值: 默认是从0开始,但不包括end。
 5     for j in range(i):
 6         count2=count2+1
 7         if temLst[i]<temLst[j]:
 8             temLst.insert(j,temLst[i])   # 从有序的数组,第一个元素开始比较,碰到比自己大的数字,赶紧刹车,停在那,所以选择insert       #比如 i=3时,[1,3,6,53,6,7,35,63,6,4,7,5,6,7,34]
 9             temLst.pop(i+1)             # 因为前面的insert操作,所以后面位数+1,这个位置的数已经insert到前面去了,所以pop弹出    #[1,3,6,53,6(pop掉),7,35,63,6,4,7,5,6,7,34]
10             break
11 print('插入排序,从有序数组最前面开始比较,insert后,再pop,循环次数:',count2)
 1 # 方式二 插入排序算法:
 2 temLst=[1,3,53,6,7,35,63,6,4,7,5,6,7,34]
 3 n=len(temLst)
 4 count3=0   #循环了34次
 5 for i in range(1,n):  #从1开始,是因为第0位看成了有序数组
 6     j=i
 7     while j-1>=0 and temLst[j-1]>temLst[j]: #从有序数组的最后一位开始,不断往前比较,遇到较大的就交换,且保证j-1>=0
 8         count3=count3+1
 9         temLst[j],temLst[j-1]=temLst[j-1],temLst[j]  #比如 i=3 时,先是 56 与6 比较,互换:1 3 6 53
10         j=j-1
11 print(temLst)
12 print('插入排序,从有序数组的最后一个开始比较,找到合适的位置,循环次数:',count3)