欢迎关注,敬请点赞!
两种基本排序算法——循环语句实现选择和冒泡排序的执行过程输出
【关键字】:
- 循环语句
- 排序
【摘要】:
- 初学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]
'''
总结:
- 编程时,需要有清晰的思路
- 借助输出函数,有助我们理解程序的执行过程
欢迎关注,敬请点赞!
返回顶部