题目一 冒泡排序 由小到大的顺序
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)