博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python算法-冒泡排序
阅读量:6593 次
发布时间:2019-06-24

本文共 1170 字,大约阅读时间需要 3 分钟。

核心算法:

在数组x[n]中,从第一个数开始,拿x[i]和后面的数x[i+1]进行比较,如果x[i]比后面的大,就交换两个数的位置,这样遍历一遍数组后,把最大的数据排在了最后面,之后继续循环排剩下的n-1个数,

直到完成所有的排序,由于每次都是把最大的排到最后面,就好像冒泡一样,故取名冒泡排序。

详细讲解:

里层for循环的逻辑:

第一步:从第一个元素开始,与第二个元素比较,如果小于,则交换两个元素的位置,否则不交换位置。

第二步:从第二个元素和第三个元素比较,如果小于,则交换两个元素的位置,否则不交换位置。

类似第一步和第二步的过程,实现第三元素和第四元素比较、第四元素和第五元素比较。。。。。

第N步:倒数第二个元素和最后一个比较。

全部比较之后,整个列表中最大的元素就找到了。

外层for循环的逻辑:

第一步到第N步

然后,重复第一步到N-1步的过程,可以找到第二大的数字

然后,重复第一步到N-2步的过程,可以找到第三大的数字

然后,重复第一步到N-3步的过程,可以找到第四大的数字

。。。。。。。

最后,重复第一步的过程(即:N-(N-2)),找到第N-1大的数字

代码示例如下:

s=[4,3,1,9,10,6,2,7,5,8] for i in range(len(s)-1): for j in range(len(s)-1-i): if s[j]>s[j+1]: s[j],s[j+1]=s[j+1],s[j] print(s)

代码思路:

# 第一次循环结果:[3, 1, 4, 9, 6, 2, 7, 5, 8, 10],找到最大的数字
# 第二次循环结果:[1, 3, 4, 6, 2, 7, 5, 8, 9, 10],找到第二大的数字
# 第三次循环结果:[1, 3, 4, 2, 6, 5, 7, 8, 9, 10],找到第三大的数字
# 第四次循环结果:[1, 3, 2, 4, 5, 6, 7, 8, 9, 10],找到第四大的数字
# 第五次循环结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],找到第五大的数字
# 第六次循环结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],找到第六大的数字
# 第七次循环结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],找到第七大的数字
# 第八次循环结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],找到第八大的数字
# 第九次循环结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],找到最小的数字
从以上解析过程可以看到,在循环第5次后列表数字已排好序

 

转载于:https://www.cnblogs.com/ssj0723/p/9516472.html

你可能感兴趣的文章
oracle 如果为空则输出0
查看>>
Spfa(最短路求解)
查看>>
使用linux-c编程实现简单的ls命令
查看>>
Q:按F12进行网络安装系统时,一直无法进入,提示加载失败?
查看>>
我的友情链接
查看>>
解决AutoCAD acmgd.dll ARX命令中发现异常
查看>>
[转]passport.js学习笔记
查看>>
10.31T3 其他算法思想
查看>>
day10,11-Python 基本数据类型介绍之数字与字符串(看看就好)
查看>>
JAVA API----Math类和Random类
查看>>
求js数组中最小值
查看>>
UVA10018 Reverse and Add
查看>>
7.16学习进度
查看>>
开源中国+soucetree
查看>>
52、多线程创建的三种方式对比
查看>>
【转载】Jquery验证 Jquery.validate详细解读
查看>>
软件需求规格书
查看>>
用Java axis2调用.net平台的Webservice出现的一些问题
查看>>
INSTALL_FAILED_OLDER_SDK
查看>>
VS2005内存泄漏检测方法[转载]
查看>>