什么是冒泡算法?

  -- 像鱼吐泡泡一样,每次都是向上冒出一个水泡

如何逻辑整理?

  -- 先拿第一个值和剩下的值,一一比较,必能找到最大的或者最小的

  -- 比较过程中,第一个值小于剩下的某个值,交换位置,依次比较到最后,最大的一个肯定在最前面,找最大

  -- 比较过程中,第一个值大于剩下的某个值,交换位置,依次比较到最后,最小的一个肯定在最前面,找最小

  -- 每次找出最大的值或者最小的值,比较循环就减少一次,当只剩下一个元素时候,就结束了

  从第几个值来看,按第几个值比较,忽略列表本身的索引值

# !/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_冒泡算法的更多相关文章

  1. 1014 C语言文法定义与C程序的推导过程 程序:冒泡算法C程序(语法树)

    阅读并理解提供给大家的C语言文法文件. 参考该文件写出一个自己好理解版的现实版的完整版的C语言文法. 给出一段C程序,画出用上述文法产生这段C程序的完整语法树. 程序:冒泡算法C程序 点此文字查看原图 ...

  2. 冒泡算法C#

    冒泡算法C# namespace数组排序 { classProgram { staticvoidMain(string[]args) { inttemp=; ,,,,,,,,}; #region该段与 ...

  3. Python函数练习:冒泡算法+快速排序(二分法)

    冒泡算法: #-*- coding: UTF-8 -*-#冒泡排序 def func(lt):if type(lt).__name__ !='list' and type(lt).__name__ ! ...

  4. javascript之冒泡算法

    今天看了js中数组的方法,其中sort()方法用于排序,就让我想到学C语言的时候有一个冒泡算法,就想用js写一个. <script> var arr=[1,30,20,40,21,31,1 ...

  5. 冒泡算法(C++模板实现)

    冒泡排序 从整体上看,冒泡排序是一种稳定排序,即排序完成后,原本序列中的键值相等的元素相对位置不会发生改变.算法的时间复杂度是O(n2),空间复杂度为O(1),即这是一个"就地算法" ...

  6. php的冒泡算法

    <?php /* 冒泡算法  * @para $arr 传人进去排序的数组  * @return $newArr 排序之后的数组  */   function maopao($arr){     ...

  7. python学习之路-6 冒泡算法、递归、反射、os/sys模块详解

    算法 冒泡算法 # 冒泡算法就是将需要排序的元素看作是一个个"气泡",最小的"气泡"最先浮出水面,排在最前面.从小到大依次排列. # 代码如下: li = [9 ...

  8. Python冒泡算法和修改配置文件

    先学习之前未完成的冒泡算法 li = [13,22,6,99,11] 从小到大 从第一个数字比较把大的往后移位 for m in range(4): num1 = li[m] num2 = li[m+ ...

  9. Python之collections序列迭代器下标式循环冒泡算法等

    练习题 元素分类 有如下值集合[11,22,33,44,55,66,77,88,99]将所有大于66的数作为一个列表放在字典的key为k1的value小于等于66的为k2的value {'k1':[7 ...

随机推荐

  1. 关于Tsung脚本无法停止的问题

    最近,利用tsung测试cm的时候,脚本是这样配置的: <load> 28 <arrivalphase phase="1" duration="2&qu ...

  2. NanUI文档 - 如何实现C#与Javascript的相互通信

    NanUI文档目录 NanUI简介 开始使用NanUI 打包并使用内嵌式的HTML/CSS/JS资源 使用网页来设计整个窗口 如何实现C#与Javascript的相互通信 如何处理NanUI中的下载过 ...

  3. rtx web 分级管理系统 二次开发

    fineui + ASP.NET+rtx server sdk 修正 rtx管理器 修改用户后分级目录出错问题. 加入 单用户多个部门 添加授权关闭部分采用 rsa加密.

  4. (转)Linux下运行python

    原文: http://blog.csdn.net/jackywgw/article/details/48847187 在linux命令行下运行python,可以直接输出hello world jack ...

  5. powershell V6.0登基之:《瘸腿脚本大帝进攻linux!》

    ------[前言]------ 每个ps大版本发布,我都会写个消息. 这次的,主标题就叫:powershell v6.0登基副标题就叫:<瘸腿脚本大帝进攻linux!> ------[p ...

  6. dataZoom 详细参数

    dataZoom:[ //区域缩放 { id: 'dataZoomX', show:true, //是否显示 组件.如果设置为 false,不会显示,但是数据过滤的功能还存在. backgroundC ...

  7. 用clipboard.js实现纯JS复制文本到剪切板

    以前很多人都是用ZeroClipboard.js来实现网页复制内容,火端也是用它.ZeroClipboard是利用flash来实现的,ZeroClipboard兼容性很好,但是由于现在越来越多的浏览器 ...

  8. Hadoop-MyEclipse安装配置

    配置环境:Hadoop-1.2.1,MyEclipse,Centos6.5 网站上有很多关于Hadoop-eclipse的安装配置信息,但很少有讲到关于怎么在MyEclipse上配置Hadoop的相关 ...

  9. PE 001~010

    题意: 001(Multiples of 3 and 5):对小于1000的被3或5整除的数字求和. 002(Even Fibonacci numbers):斐波那契数列中小于等于4 000 000的 ...

  10. JSON对象添加删除属性

    假如目前我们有如下一个Json对象 var jsonObj={ 'param1':22, 'param2' :33 }; 增加属性: 我们现在向该对象jsonObj中添加一个新的属性字段:param3 ...