两种基本排序算法——循环语句实现选择和冒泡排序的执行过程输出

欢迎关注,敬请点赞!


【关键字】:

  • 循环语句
  • 排序

【摘要】:

  • 初学python编程,练习用循环语句实现列表排序,常常被2种基本排序思路懵逼
  • 将执行过程中每一次比较的说明和结果输出,类似于反《九九乘法表》的格式
  • 供大家参考:提供思路、加深理解
  • 以从小到大排列为例

思路一:(从前往后确定,选择排序)

返回顶部
第一轮:拿 第一位 依次与后面的第二位、第三位、…、及最后一位比较,如果"第一位"大,就互换

第二轮:拿 第二位 依次与后面的第三位、…、及最后一位比较,如果"第二位"大,就互换

第n-1轮:拿 倒数第二位 与 最后一位 比较,如果"倒数第二位"大,就互换

  • 第一种思路程序段:(跨嵌套比较)

lt = [7,3,1,5]
n = len(lt)
print('第一种思路执行过程(从前往后确定):')
for i in range(n-1): # 运行 n-1 轮
    print('\n第%d轮开始:'%(i+1), lt)
    for j in range(i+1,n): # 与后一位(i+1)开始比较,一直到最后一位(n)。
        if lt[i] > lt[j]: #跨嵌套比较
            lt[i],lt[j] = lt[j],lt[i] #如果前面的值大,就互换
            print('|第%d位 >  第%d位,换位:'%(i+1,j+1),end=' ')
            # 用 i+1 和 j+1 是因为人们习惯范围(1到n),end = ' '暂时不换行
        else:
            print('|第%d位 <= 第%d位,不变:'%(i+1,j+1),end=' ')
        print(lt, end=' ')
    print('\n第%d轮结果,第%d位已固定,不再参与下轮比较: '%(i+1,i+1),lt)
print('\n最终结果:',lt)
  • 第一种思路输出展示:

'''
第一种思路执行过程(从前往后确定):

第1轮开始: [7, 3, 1, 5]
|第1位 >  第2位,换位: [3, 7, 1, 5] |第1位 >  第3位,换位: [1, 7, 3, 5] |第1位 <= 第4位,不变: [1, 7, 3, 5] 
第1轮结果,第1位已固定,不再参与下轮比较:  [1, 7, 3, 5]

第2轮开始: [1, 7, 3, 5]
|第2位 >  第3位,换位: [1, 3, 7, 5] |第2位 <= 第4位,不变: [1, 3, 7, 5] 
第2轮结果,第2位已固定,不再参与下轮比较:  [1, 3, 7, 5]

第3轮开始: [1, 3, 7, 5]
|第3位 >  第4位,换位: [1, 3, 5, 7] 
第3轮结果,第3位已固定,不再参与下轮比较:  [1, 3, 5, 7]

最终结果:[1, 3, 5, 7]
'''

思路二:(从后往前确定,冒泡排序)

返回顶部
第一轮:拿 第一位与第二位比、"第二位"与第三位、…、"倒数第二位"与最后一位比,如果前面大就互换

第二轮:拿 第一位与第二位比、"第二位"与第三位、…、"倒数第三位"与倒数第二位比

第n-1轮:拿 第一位与第二位比

  • 第二种思路程序段:(嵌套内比较)

lt = [2,5,8,3]
n = len(lt)
print('\n第二种思路执行过程(从后往前确定): ')
for i in range(n-1): # 运行(n-1)轮
    print('\n第%d轮开始:'%(i+1), lt)
    for j in range(n-1-i): # n-1:最后一次内循环最大值;n-1-i:已经确定位置的数,不再参与比较
        if lt[j] > lt[j+1]: #嵌套内比较
            lt[j],lt[j+1] = lt[j+1],lt[j] #如果前面的值大,就互换
            print('|第%d位 >  第%d位,换位:'%(j+1,j+1+1),end=' ')
            # 用 j+1 和 (j+1)+1 是因为人们习惯范围(1到n),end = ' '
        else:
            print('|第%d位 <= 第%d位,不变:'%(j+1,j+1+1),end=' ')
        print(lt, end=' ')
    print('\n第%d轮结果,第%d位已固定,不再参与下轮比较: '%(i+1,n-i),lt)
print('最终结果:',lt)
  • 第二种思路输出展示:

返回顶部

'''
第二种思路执行过程(从后往前确定): 

第1轮开始: [2, 5, 8, 3]
|第1位 <= 第2位,不变: [2, 5, 8, 3] |第2位 <= 第3位,不变: [2, 5, 8, 3] |第3位 >  第4位,换位: [2, 5, 3, 8] 
第1轮结果,第4位已固定,不再参与下轮比较:  [2, 5, 3, 8]

第2轮开始: [2, 5, 3, 8]
|第1位 <= 第2位,不变: [2, 5, 3, 8] |第2位 >  第3位,换位: [2, 3, 5, 8] 
第2轮结果,第3位已固定,不再参与下轮比较:  [2, 3, 5, 8]

第3轮开始: [2, 3, 5, 8]
|第1位 <= 第2位,不变: [2, 3, 5, 8] 
第3轮结果,第2位已固定,不再参与下轮比较:  [2, 3, 5, 8]

最终结果:[2, 3, 5, 8]
'''

总结:

  • 编程时,需要有清晰的思路
  • 借助输出函数,有助我们理解程序的执行过程

欢迎关注,敬请点赞!
返回顶部

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值