python练习题:冒泡排序 和插入排序 (list的应用)

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

'''第一个是自己写的
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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值