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 相关文章推荐
Python时区设置方法与pytz查询时区教程
Nov 27 Python
Django中使用group_by的方法
May 26 Python
Python实现控制台输入密码的方法
May 29 Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
Jul 17 Python
使用Py2Exe for Python3创建自己的exe程序示例
Oct 31 Python
Python Des加密解密如何实现软件注册码机器码
Jan 08 Python
Python实现自动访问网页的例子
Feb 21 Python
Python numpy多维数组实现原理详解
Mar 10 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
Jul 14 Python
如何用python 操作zookeeper
Dec 28 Python
python中最小二乘法详细讲解
Feb 19 Python
Python使用openpyxl模块处理Excel文件
Jun 05 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&amp;mysql(三)
2006/10/09 PHP
mysql 搜索之简单应用
2007/04/27 PHP
php session 检测和注销
2009/03/16 PHP
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
2014/01/19 PHP
php获取访问者IP地址汇总
2015/04/24 PHP
基于PHP后台的Android新闻浏览客户端
2016/05/23 PHP
Javascript的常规数组和关联数组对比小结
2012/05/24 Javascript
jquery定时滑出可最小化的底部提示层特效代码
2013/10/02 Javascript
2014年50个程序员最适用的免费JQuery插件
2014/12/15 Javascript
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
每天一篇javascript学习小结(String对象)
2015/11/18 Javascript
JavaScript中transform实现数字翻页效果
2017/03/08 Javascript
js实现按座位号抽奖
2017/04/05 Javascript
微信小程序template模板实例详解
2017/10/27 Javascript
微信小程序实现倒计时调用相机自动拍照功能
2018/06/10 Javascript
对layui中表单元素的使用详解
2018/08/15 Javascript
json数据格式常见操作示例
2019/06/13 Javascript
[01:20]DOTA2 齐天大圣至宝动态展示
2016/12/13 DOTA
[54:27]TNC vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python版的文曲星猜数字游戏代码
2013/09/02 Python
Python实现好友全头像的拼接实例(推荐)
2017/06/24 Python
matplotlib绘制动画代码示例
2018/01/02 Python
python删除字符串中指定字符的方法
2018/08/13 Python
Python完全识别验证码自动登录实例详解
2019/11/24 Python
在python中利用try..except来代替if..else的用法
2019/12/19 Python
Python 将json序列化后的字符串转换成字典(推荐)
2020/01/06 Python
在python3.9下如何安装scrapy的方法
2021/02/03 Python
详解HTML5中download属性的应用
2015/08/06 HTML / CSS
关于HTML5 Placeholder新标签低版本浏览器下不兼容的问题分析及解决办法
2016/01/27 HTML / CSS
Cocopanda波兰:购买化妆品、护肤品、护发和香水
2020/05/25 全球购物
追悼会上的答谢词
2014/01/10 职场文书
单位创先争优活动方案
2014/01/26 职场文书
大学生工作求职信
2014/06/23 职场文书
2019班干部竞选演讲稿范本!
2019/07/08 职场文书
漫画「你在春天醒来」第10卷封面公开
2022/03/21 日漫
java获取一个文本文件的编码(格式)信息
2022/09/23 Java/Android