python_冒泡算法
什么是冒泡算法?
-- 像鱼吐泡泡一样,每次都是向上冒出一个水泡
如何逻辑整理?
-- 先拿第一个值和剩下的值,一一比较,必能找到最大的或者最小的
-- 比较过程中,第一个值小于剩下的某个值,交换位置,依次比较到最后,最大的一个肯定在最前面,找最大
-- 比较过程中,第一个值大于剩下的某个值,交换位置,依次比较到最后,最小的一个肯定在最前面,找最小
-- 每次找出最大的值或者最小的值,比较循环就减少一次,当只剩下一个元素时候,就结束了
从第几个值来看,按第几个值比较,忽略列表本身的索引值
# !/usr/bin/python3 def buble(fish):
'''冒泡算法'''
for j in range(1, len(fish)): # 从第一个开始根后面的比较
for i in range(len(fish)-j): # 每遍历找到最大或最小的放在第一位,然后再次循环剩下的元素
if fish[i] > fish[i+1]: # 如果第i个元素大i+1,互换位置,相当于找到最小的放最前面
# temp = fish[i+1]
# fish[i+1] = fish[i]
# fish[i] = temp
fish[i], fish[i+1] = fish[i+1], fish[i] # 位置互换
return fish if __name__ == '__main__':
fish = [600, 4, 55, 42, 11, 5, 33, 6, 8, 20, 10, 66, 99, 77, 22]
result = buble(fish)
print(result)
利用列表本身的索引值进行比较,不更好更容易理解么?
# !/usr/bin/python3 def buble(fish):
'''冒泡算法'''
for j in range(len(fish)): # 从列表0索引开始,最后的元素就是一个,到最后一个元素,列表已经排好,无需自己比较自己
for i in range(j + 1, len(fish)): # j位置都是已经排好了,从j+1开始比较
if fish[j] < fish[i]: # 大于比较,交互位置,取最小的在前面
# temp = list_1[i+1]
# list_1[i+1] = list_1[i]
# list_1[i] = temp
fish[j], fish[i] = fish[i], fish[j] # 交互位置,相当于以上三句话
return fish if __name__ == '__main__':
fish = [600, 4, 55, 42, 11, 5, 33, 6, 8, 20, 10, 66, 99, 77, 22]
result = buble(fish)
print(result)
记住一句话,比最大,交互位置,取最小的值,比最小,交互位置,取最大值
大于的时候,交互位置,实际上是把小的值,推到了列表最前面,
小于的时候,把大的值,推到最前面,这个才是冒泡算法最让人困惑的地方
python_冒泡算法的更多相关文章
- 1014 C语言文法定义与C程序的推导过程 程序:冒泡算法C程序(语法树)
阅读并理解提供给大家的C语言文法文件. 参考该文件写出一个自己好理解版的现实版的完整版的C语言文法. 给出一段C程序,画出用上述文法产生这段C程序的完整语法树. 程序:冒泡算法C程序 点此文字查看原图 ...
- 冒泡算法C#
冒泡算法C# namespace数组排序 { classProgram { staticvoidMain(string[]args) { inttemp=; ,,,,,,,,}; #region该段与 ...
- Python函数练习:冒泡算法+快速排序(二分法)
冒泡算法: #-*- coding: UTF-8 -*-#冒泡排序 def func(lt):if type(lt).__name__ !='list' and type(lt).__name__ ! ...
- javascript之冒泡算法
今天看了js中数组的方法,其中sort()方法用于排序,就让我想到学C语言的时候有一个冒泡算法,就想用js写一个. <script> var arr=[1,30,20,40,21,31,1 ...
- 冒泡算法(C++模板实现)
冒泡排序 从整体上看,冒泡排序是一种稳定排序,即排序完成后,原本序列中的键值相等的元素相对位置不会发生改变.算法的时间复杂度是O(n2),空间复杂度为O(1),即这是一个"就地算法" ...
- php的冒泡算法
<?php /* 冒泡算法 * @para $arr 传人进去排序的数组 * @return $newArr 排序之后的数组 */ function maopao($arr){ ...
- python学习之路-6 冒泡算法、递归、反射、os/sys模块详解
算法 冒泡算法 # 冒泡算法就是将需要排序的元素看作是一个个"气泡",最小的"气泡"最先浮出水面,排在最前面.从小到大依次排列. # 代码如下: li = [9 ...
- Python冒泡算法和修改配置文件
先学习之前未完成的冒泡算法 li = [13,22,6,99,11] 从小到大 从第一个数字比较把大的往后移位 for m in range(4): num1 = li[m] num2 = li[m+ ...
- Python之collections序列迭代器下标式循环冒泡算法等
练习题 元素分类 有如下值集合[11,22,33,44,55,66,77,88,99]将所有大于66的数作为一个列表放在字典的key为k1的value小于等于66的为k2的value {'k1':[7 ...
随机推荐
- css实现椭圆、半椭圆
一.自适应的椭圆 1. 椭圆 css .ellipse{ width: 250px; height: 150px; margin: 50px; background: #FFD900; border- ...
- chrome调试工具高级不完整使用指南(优化篇)
上一篇文章我们说了chrome调试工具的一些比较基础功能的用法,接下来我们要在这一篇文章中说一说,其他一些chrome调试工具的使用方法 2.1.5 Network模块 在netWork模块中,大致上 ...
- 简陋的swift carthage copy-frameworks 辅助脚本
在看 carthage 时,其中需要配置一个 copy-frameworks 脚本,此脚本特殊的地方,需要手动填写 Input Files 和 Output Files.一个一个填写,很糟心~ 观察了 ...
- MongoDb 快速入门教程
文章首发于[博客园-陈树义],点击跳转到原文MongoDb 快速入门教程. MongoDb 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 它是可扩展的 ...
- python 中__setattr__, __getattr__,__getattribute__, __call__使用方法
object._getattr_(self, name) 拦截点号运算.当对未定义的属性名称和实例进行点号运算时,就会用属性名作为字符串调用这个方法.如果继承树可以找到该属性,则不调用此方法 实例in ...
- DeepLearning.ai学习笔记(四)卷积神经网络 -- week3 目标检测
一.目标定位 这一小节视频主要介绍了我们在实现目标定位时标签该如何定义. 上图左下角给出了损失函数的计算公式(这里使用的是平方差) 如图示,加入我们需要定位出图像中是否有pedestrian,car, ...
- SSIS 延迟验证(DelayValidation)
验证是一个事件,该事件在Package执行时,第一个被触发,验证能够避免SSIS引擎执行一个有异常的Package或Task.延迟验证(DelayValidation)是把验证操作延迟到Package ...
- php中的echo,json_decode,json_encode常用函数使用注意事项
---恢复内容开始--- 1.echo函数 echo只能输出单个字符串或者整数,不能直接输出数组.要输出多个字符串必须用分号 eg: echo可以输出字符串加变量,如果输出的数字字符串则会将对应的数字 ...
- windbg关于.NET分析的扩展命令
收到一个dump文件,运行环境的.net framework的详细版本是多少呢? dump信息与性能计数器结合分析时,想知道该dump运行的进程号是多少? dump定位到有效的堆栈信息,而对应的源码是 ...
- 给“file”类型的input框赋值的问题
开发"新闻编辑"功能时,会遇到给"file"类型的input框赋值的问题,用来展示之前上传的文件,但由于file类型的input框受到安全限制,所以不能被赋值, ...