题目一 冒泡排序 由小到大的顺序
'''第一个是自己写的
temLst=[1,3,53,6,7,35,63,6,4,7,5,6,7,34]
第一趟比较后,找到最小的数,且放在第一位,始终拿【0】与其余比较
第二趟比较时,始终拿【1】与其他后面的比较
'''
#for i in temLst: 要用下标,感觉while更顺手 (自己写的) 循环次数比下面的多一些哦
temLst=[1,3,53,6,7,35,63,6,4,7,5,6,7,34]
n=len(temLst)
i=0
j=0
count=0 #循环了121次
while i<(n-1):
j=i+1
while j<=(n-1):
count = count + 1
if temLst[i]>temLst[j]:
temLst[i],temLst[j]=temLst[j],temLst[i]
else:
j=j+1
i=i+1
print('自己写的count循环次数;',count)
冒泡排序:
# 通过打印循环次数也比较,谁更高效#for循环写冒泡排序
# 遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
# 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
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的方式
# 遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
# 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
temLst=[1,3,53,6,7,35,63,6,4,7,5,6,7,34]
n=len(temLst)
count2=0 #循环67次
for i in range(1,n): #i in range(n) 取值: 默认是从0开始,但不包括end。
for j in range(i):
count2=count2+1
if temLst[i]<temLst[j]:
temLst.insert(j,temLst[i]) # 从有序的数组,第一个元素开始比较,碰到比自己大的数字,赶紧刹车,停在那,所以选择insert #比如 i=3时,[1,3,6,53,6,7,35,63,6,4,7,5,6,7,34]
temLst.pop(i+1) # 因为前面的insert操作,所以后面位数+1,这个位置的数已经insert到前面去了,所以pop弹出 #[1,3,6,53,6(pop掉),7,35,63,6,4,7,5,6,7,34]
break
print('插入排序,从有序数组最前面开始比较,insert后,再pop,循环次数:',count2)
方式二 插入排序算法:
temLst=[1,3,53,6,7,35,63,6,4,7,5,6,7,34]
n=len(temLst)
count3=0 #循环了34次
for i in range(1,n): #从1开始,是因为第0位看成了有序数组
j=i
while j-1>=0 and temLst[j-1]>temLst[j]: #从有序数组的最后一位开始,不断往前比较,遇到较大的就交换,且保证j-1>=0
count3=count3+1
temLst[j],temLst[j-1]=temLst[j-1],temLst[j] #比如 i=3 时,先是 56 与6 比较,互换:1 3 6 53
j=j-1
print(temLst)
print('插入排序,从有序数组的最后一个开始比较,找到合适的位置,循环次数:',count3)