python与冒泡排序
上一篇文章,介绍了一个非常快的排序算法--桶排序,但是它的缺点就是太耗资源了,这次要实现的算法就不用太耗资源了,它就是冒泡排序。
问题提出:
将以下数据升序排列:9, 2, 8, 6, 4
冒泡排序原理:
冒泡排序就是遍历数据,每次只与下一个数字比较,如果这两个数顺序不对,则与交换过来。
就上面那个问题来说,因为要升序排列,所以数字越大越排在后面。则两个数比较的时候,如果后一个数比当前数小,则顺序不对,要将这两个数交换。遍历的过程如下图:
第一次比较第一和第二个数字,9与2相比较,9比2大,顺序不对,则交换位置。
第二次比较第二与第三个数字,因为9换到了第二位,则9与8比较,9大,顺序不对,则交换位置。
以此类推,最后9就像泡泡一样升到了最后一位,我们称这样为一趟,这一趟里面有多次比较。
由于一趟只归为一个数,则如果有n个数字,则需要进行n-1趟。
因为归位后的数字不用再比较了,所以每趟只需要比较n-1-i次(i为已执行的趟数)。
由上可以得出冒泡排序的关键步骤是两个循环:
1 for(i = 0; i < n-1; i++){ 2 for(j = 0; j < n-1-i; j++) 3 if(a[j] > a[j+1]){ 4 temp = a[j]; 5 a[j] = a[j+1]; 6 a[j+1] = temp; 7 } 8 }
python实现:
根据上述思路,用python实现也是把关键地方实现即可:
1 #假设变量已经全部定义好 2 for i in range(len-1): 3 for j in range(len-1-i): 4 if a[j] > a[j+1]: 5 a[j], a[j+1] = a[j+1], a[j]
以下是完整代码:(可以到github上下载https://github.com/DIGCreat/pythonAndAlgorithms.git)
1 #!/usr/bin/env python 2 # -*- coding:utf8 -*- 3 ''' 4 简介:本程序主要是用python实现冒泡排序,程序的功能是实现 5 降序排列。 6 7 作者:King 日期:2016/08/01 版本1 8 ''' 9 10 class BubbleSort(object): 11 ''' 12 self.datas: 要排序的数据列表 13 self.datas_len: 数据急的长度 14 _sort(): 排序函数 15 show(): 输出结果函数 16 17 用法: 18 BubbleSort(datas) 实例化一个排序对象 19 BubbleSort(datas)._sort() 开始排序,由于排序直接操作 20 self.datas, 所以排序结果也 21 保存在self.datas中 22 BubbleSort(datas).show() 输出结果 23 ''' 24 def __init__(self, datas): 25 self.datas = datas 26 self.datas_len = len(datas) 27 28 def _sort(self): 29 #冒泡排序要排序n个数,由于每遍历一趟只排好一个数字, 30 #则需要遍历n-1趟,所以最外层循环是要循环n-1次,而 31 #每次趟遍历中需要比较每归位的数字,则要在n-1次比较 32 #中减去已排好的i位数字,则第二层循环要遍历是n-1-i次 33 for i in range(self.datas_len-1): 34 for j in range(self.datas_len-1-i): 35 if(self.datas[j] < self.datas[j + 1]): 36 self.datas[j], self.datas[j+1] = \ 37 self.datas[j+1], self.datas[j] 38 39 def show(self): 40 print 'Result is:', 41 for i in self.datas: 42 print i, 43 print '' 44 45 if __name__ == '__main__': 46 try: 47 datas = raw_input('Please input some number:') 48 datas = datas.split() 49 datas = [int(datas[i]) for i in range(len(datas))] 50 except Exception: 51 pass 52 53 bls = BubbleSort(datas) 54 bls._sort() 55 bls.show()
总结:
冒泡排序因为是在原数组上直接操作,所以它占的空间资源较少,在数据量不大的情况还是挺好的。但是由于算法涉及双重循环,所以在数据量大的情况下,程序运行的时间是相当长的,因为要一次一次地遍历数据。
最后有兴趣的同学可以关注我的微信公众号,可以随时及时方便看我的文章。*^_^*
扫码关注或者搜索微信号:King_diary
转载于:https://www.cnblogs.com/king-ding/p/bubblesort.html
python与冒泡排序相关推荐
- python实现冒泡排序完整算法_Python实现冒泡排序算法的完整实例
冒泡排序:顾名思义就是(较小的值)像泡泡一样往上冒,(大的值)往下沉. 实现原理:依次将相邻两个数值进行比较,较小的数值移到左边,较大的数值移到右边,依次比较完第一轮后,最大的数值应该排在最右边.然后 ...
- python实现冒泡排序视频_Python实现冒泡排序算法的完整实例
冒泡排序:顾名思义就是(较小的值)像泡泡一样往上冒,(大的值)往下沉. 实现原理:依次将相邻两个数值进行比较,较小的数值移到左边,较大的数值移到右边,依次比较完第一轮后,最大的数值应该排在最右边.然后 ...
- python实现冒泡排序视频_Python实现冒泡排序
图文教程 上次,我们学习了Python中的循环.今天,我们做一个关于循环的练习,来加深大家的学习成果. 这个练习叫什么呢?我们就用Python实现冒泡排序 冒泡排序 要学习冒泡排序必须知道它的原理: ...
- Python实现冒泡排序的代码
以下是Python实现冒泡排序的代码: 格式有点问题,重新调整一下,如下: def bubbleSort(nums):# 设置一个flag,用来判断某次循环是否发生了交换flag = Truefor ...
- python实现冒泡排序完整算法_利用python实现冒泡排序算法实例代码
利用python实现冒泡排序算法实例代码 冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数 ...
- python 实现冒泡排序的思路和代码
当需求提到需要从小到大的排序时,我们很自然的就会想起最基础的"冒泡排序" 冒泡排序的原理就不再多说了,网上有一大堆,以下是python实现冒泡排序的代码. 对于冒泡排序算法,如果有 ...
- python列表冒泡排序,Python实现简单的列表冒泡排序和反转列表操作示例
#-*-coding:utf-8-*- #g:/python #冒泡排序 #1.定义一个列表 number=[6665,666,323,124,4442,5,123,412,55] #外循环控制冒泡排 ...
- python学习——python实现冒泡排序算法
python实现冒泡排序算法 一.冒泡排序算法实现原理 基本思想 具体步骤 二.图解冒泡排序 三.py代码实现冒泡排序算法 一.冒泡排序算法实现原理 基本思想 比较相邻的元素.如果第一个比第二个大,就 ...
- python复习冒泡排序
冒泡排序: 思路: 先找到最大值放到最右边: #encoding=utf-8 a=[1,9,2,8,3,6,4] print "a before change:",a for i ...
最新文章
- 基于ESP8266-01s 增加对于FZ35恒流电子负载WiFi接口
- 如何在Vim中复制到剪贴板?
- [深度学习] 自然语言处理 --- 基于Attention机制的Bi-LSTM文本分类
- codeforces1012 B. Chemical table(并查集+思维)
- Keil(MDK-ARM-STM32)系列教程(二)工具栏详细说明
- 魅族 linux 手机,魅族flyme开源,能否再现linux辉煌,为什么要开源
- 最好的移动安全计划:先检查风险 再对症下药
- cookie、localStorage和sessionStorage三者的异同
- 8.1、Spring Boot 属性配置
- webpack多页面构建优化不完全指北
- 【LOJ】#2187. 「SHOI2014」三叉神经树
- wx 2150183182
- 王垠:对TAOCP的真正看法
- Macbook Pro 安装 win10 单操作系统
- red5-server-1.0.6-RELEASE 启动异常
- iOS App Store 审核 other 处理、解决办法 The review of your app is taking longer than expected
- 落实等级保护工作的意义简单说明
- 卢卡斯定理(详细证明)
- 基于matlab的逻辑回归示例
- C语言实现两个整数相除的四舍五入和进一法
热门文章
- java反序列化时区,Jackson使用Java 8将Elasticsearch反序列化为LocalDateTime
- 关于如何修改ISA server 防火墙并行最大TCP连接数问题和优化ISA 服务器淹没缓解设置
- Ceph使用块设备完整操作流程
- Android基础新手教程——3.4 TouchListener PK OnTouchEvent + 多点触碰
- Ubuntu虚拟机及Petalinux开发平台安装
- 更改管理员密码以后网站不能启动
- OpenCV-python学习笔记(六)——梯度算子,边缘检测和轮廓提取
- ar路由器 pppoe下发ipv6 dns_手机从路由器获取IP、光猫PPPOE拨号过程、IP/VLAN
- scheduled 每月最后一天_单周、双周、每月?哪种定投方式收益最高?
- Python Debug调试技巧