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 拆包可迭代数据如tuple, list
Dec 29 Python
python 字典中取值的两种方法小结
Aug 02 Python
Anaconda下配置python+opencv+contribx的实例讲解
Aug 06 Python
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
Oct 22 Python
对python插入数据库和生成插入sql的示例讲解
Nov 14 Python
python+PyQT实现系统桌面时钟
Jun 16 Python
django框架ModelForm组件用法详解
Dec 11 Python
Pycharm 使用 Pipenv 新建的虚拟环境(图文详解)
Apr 16 Python
python的flask框架难学吗
Jul 31 Python
matplotlib基础绘图命令之bar的使用方法
Aug 13 Python
Python fileinput模块如何逐行读取多个文件
Oct 05 Python
pyspark对Mysql数据库进行读写的实现
Dec 30 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新手上路(八)
2006/10/09 PHP
php修改指定文件后缀的方法
2014/09/11 PHP
js文字滚动停顿效果代码
2008/06/28 Javascript
30个最好的jQuery 灯箱插件分享
2011/04/25 Javascript
js中将URL中的参数提取出来作为对象的实现代码
2011/08/16 Javascript
ajax的hide隐藏问题解决方法
2012/12/11 Javascript
jquery显示隐藏input对象
2014/07/21 Javascript
2014 年最热门的21款JavaScript框架推荐
2014/12/25 Javascript
javascript实现字符串反转的方法
2015/02/05 Javascript
javascript实现动态改变层大小的方法
2015/05/14 Javascript
7个去伪存真的JavaScript面试题
2016/01/07 Javascript
原生js实现百叶窗效果及原理介绍
2016/04/12 Javascript
利用JavaScript实现拖拽改变元素大小
2016/12/14 Javascript
Web开发中客户端的跳转与服务器端的跳转的区别
2017/03/05 Javascript
JavaScript中闭包的详解
2017/04/01 Javascript
javascript中this用法实例详解
2017/04/06 Javascript
javascript数据结构中栈的应用之符号平衡问题
2017/04/11 Javascript
WebSocket的通信过程与实现方法详解
2018/04/29 Javascript
vscode下的vue文件格式化问题
2018/11/28 Javascript
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
2019/05/22 Javascript
Python的一些用法分享
2012/10/07 Python
浅谈Python中copy()方法的使用
2015/05/21 Python
解决python读取几千万行的大表内存问题
2018/06/26 Python
朴素贝叶斯Python实例及解析
2018/11/19 Python
python实现文字版扫雷
2020/04/24 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
一款纯css3实现的鼠标经过按钮特效教程
2014/11/09 HTML / CSS
全球在线商店:BerryLook
2019/04/14 全球购物
GAZMAN官网:澳大利亚领先的男装品牌
2019/12/19 全球购物
刚毕业大学生自荐信范文
2014/02/20 职场文书
4S店售后客服自我评价
2014/04/09 职场文书
青年标兵事迹材料
2014/08/16 职场文书
运动会演讲稿100字
2014/08/25 职场文书
工厂标语大全
2014/10/06 职场文书
家庭贫困证明
2015/06/16 职场文书
唤醒紫霞仙子,携手再游三界!大话手游X《大话西游》电影合作专属剧情任务
2022/04/03 其他游戏