python实现冒泡排序算法的两种方法


Posted in Python onMarch 10, 2018

什么是冒泡排序?

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。

它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名冒泡排序。

以上是百度词条对冒泡排序的官方解释。

但是我要说一下我的个人理解,我觉得冒泡排序的核心思想是:每次比较两个数,如果他们顺序错误(大于或者小于),那么就把他们置换。

例如:如果要将五个无序的数字做升序排列(也就是从小到大排列),那么利用冒泡排序如何实现呢?

  1. 首先,比较第一个数和第二个数的大小,由于是从小到大排列,所以如果第一个数大于第二个数,则将这两个数互换位置,反之则不变。
  2. 然后进行第二个数和第三个数比较,同上。
  3. 这样依次比较一轮后,你会发现,总共比了4次,也就是说,如果有n个数进行比较,那么需要n-1次才能完成。
  4. 上面过程主要完成了一轮比较,最终确定了一个最大的数,并且排在5个数的最后,也就是第五个数。
  5. 那么也就意味着需要在进行第一个数到第四个数的一轮比较,确定最大值。
  6. 接着从第一个数到第三个数......
  7. 这样规律就很明显了,五个数需要比较四轮,就能将5个数升序排列,所以n个数需要比较n-1轮。

以上就是冒泡排序的实现思路,接下来看代码!

如何实现?

到底该怎么实现呢?看了上面的分析,我相信你也能编出来吧!

看下我用python编的吧:

方法一:常规实现冒泡排序

# 方法1
# 定义一个列表,用于存放数字
list = []
while True:
  # 自定义输入数字个数
  print('你想排列几个数?')
  try:
    num = int(input())
    for i in range(num):
      a = int(input('请输入第' + str((i+1)) + '个整数:'))
      list.append(a)
  except ValueError:
    print('输入有误!')
  
  # 冒泡排序核心代码,
  for j in range(len(list)-1):
    for k in range(len(list)-1):
      if list[k] < list[k+1]:
        t = list[k]
        list[k] = list[k+1]
        list[k+1] = t

  print(list)

算法的优劣主要看它的时间复杂度,冒泡排序的时间复杂度为:O(N^2)

可以看出,冒泡排序的时间复杂度偏高,所以它还不是最优算法!

方法二:利用sorted()方法快速实现排序

# 定义一个列表对象存数字
list = []
print('你想排列几个数?')
try:
  num = int(input())
  for i in range(num):
    a = int(input('请输入第' + str((i + 1)) + '个整数:'))
    list.append(a)
except ValueError:
  print('输入有误!')

# 利用sorted()方法排序,并使用reverse字段实现降序
print(sorted(list, reverse=True))

非常推荐这种利用sorted()方法实现排序的方法,因为简单嘛!python就是以简洁为名,越少的代码实现相同的功能,何乐而不为!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
深入浅析ImageMagick命令执行漏洞
Oct 11 Python
Python操作使用MySQL数据库的实例代码
May 25 Python
使用Python实现博客上进行自动翻页
Aug 23 Python
python实现录音小程序
Oct 26 Python
python使用多进程的实例详解
Sep 19 Python
OpenCV+Python识别车牌和字符分割的实现
Jan 31 Python
python字符串替换第一个字符串的方法
Jun 26 Python
python/Matplotlib绘制复变函数图像教程
Nov 21 Python
Python argparse模块使用方法解析
Feb 20 Python
python实现控制台输出彩色字体
Apr 05 Python
详解Anaconda安装tensorflow报错问题解决方法
Nov 01 Python
使用python+pygame开发消消乐游戏附完整源码
Jun 10 Python
Python使用pyh生成HTML文档的方法示例
Mar 10 #Python
tensorflow获取变量维度信息
Mar 10 #Python
TensorFlow变量管理详解
Mar 10 #Python
TensorFlow神经网络优化策略学习
Mar 09 #Python
TensorFlow实现AutoEncoder自编码器
Mar 09 #Python
TensorFlow实现MLP多层感知机模型
Mar 09 #Python
TensorFlow实现Softmax回归模型
Mar 09 #Python
You might like
PHP之变量、常量学习笔记
2008/03/27 PHP
php中time()与$_SERVER[REQUEST_TIME]用法区别
2014/11/19 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
2016/09/22 PHP
PHP实现json_decode不转义中文的方法
2017/05/20 PHP
PHP简单实现二维数组赋值与遍历功能示例
2017/10/19 PHP
Jquery之美中不足小结
2011/02/16 Javascript
JavaScript原型继承之基础机制分析
2011/08/26 Javascript
javascript权威指南 学习笔记之变量作用域分享
2011/09/28 Javascript
javascript关于运动的各种问题经典总结
2015/04/27 Javascript
常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数
2016/09/23 Javascript
js 模仿锚点定位的实现方法
2016/11/19 Javascript
vue实现菜单切换功能
2019/05/08 Javascript
详解使用JWT实现单点登录(完全跨域方案)
2019/08/02 Javascript
node命令行工具之实现项目工程自动初始化的标准流程
2019/08/12 Javascript
关于vue路由缓存清除在main.js中的设置
2019/11/06 Javascript
vue 实现v-for循环回来的数据动态绑定id
2019/11/07 Javascript
JavaScript实现放大镜效果代码示例
2020/04/29 Javascript
Python获取网段内ping通IP的方法
2019/01/31 Python
python日期相关操作实例小结
2019/06/24 Python
使用Python opencv实现视频与图片的相互转换
2019/07/08 Python
余弦相似性计算及python代码实现过程解析
2019/09/18 Python
利用python生成照片墙的示例代码
2020/04/09 Python
Python 制作查询商品历史价格的小工具
2020/10/20 Python
35款精致的 CSS3 和 HTML5 网页模板 推荐
2012/08/03 HTML / CSS
浅析HTML5 Landmark
2020/09/11 HTML / CSS
西班牙鞋子和箱包在线销售网站:zapatos.es
2020/02/17 全球购物
Aosom西班牙:家具在线商店
2020/06/11 全球购物
Python面试题:Python是如何进行内存管理的
2014/08/04 面试题
自荐信要包含哪些内容
2013/11/06 职场文书
党章学习思想汇报
2014/01/14 职场文书
小班重阳节活动方案
2014/02/08 职场文书
请假条怎么写
2014/04/10 职场文书
老师对学生的评语
2014/04/18 职场文书
感恩老师演讲稿400字
2014/08/28 职场文书
观看信仰心得体会
2014/09/04 职场文书
机关作风整顿个人整改措施思想汇报
2014/09/29 职场文书