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对小数进行除法运算的正确方法示例
Aug 25 Python
python使用socket远程连接错误处理方法
Apr 29 Python
python实现批量下载新浪博客的方法
Jun 15 Python
Python正规则表达式学习指南
Aug 02 Python
python 读写txt文件 json文件的实现方法
Oct 22 Python
利用Opencv中Houghline方法实现直线检测
Feb 11 Python
python实现装饰器、描述符
Feb 28 Python
python实现读取excel文件中所有sheet操作示例
Aug 09 Python
python实现KNN分类算法
Oct 16 Python
pytorch标签转onehot形式实例
Jan 02 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
Jan 18 Python
python学习之使用Matplotlib画实时的动态折线图的示例代码
Feb 25 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
用Flash图形化数据(一)
2006/10/09 PHP
PHP封装的MSSql操作类完整实例
2016/05/26 PHP
PHP7常量数组用法分析
2016/09/26 PHP
jQuery 使用手册(六)
2009/09/23 Javascript
jQuery中:checked选择器用法实例
2015/01/04 Javascript
json+jQuery实现的无限级树形菜单效果代码
2015/08/27 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
2015/10/12 Javascript
Javascript设计模式之观察者模式(推荐)
2016/03/29 Javascript
jquery分页插件jquery.pagination.js实现无刷新分页
2016/04/01 Javascript
node-http-proxy修改响应结果实例代码
2016/06/06 Javascript
vue多级多选菜单组件开发
2020/09/08 Javascript
Javascript基础回顾之(三) js面向对象
2017/01/31 Javascript
走进AngularJs之过滤器(filter)详解
2017/02/17 Javascript
微信小程序  TLS 版本必须大于等于1.2问题解决
2017/02/22 Javascript
xmlplus组件设计系列之文本框(TextBox)(3)
2017/05/03 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
[01:02:46]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
使用python编写脚本获取手机当前应用apk的信息
2014/07/21 Python
Python爬取qq music中的音乐url及批量下载
2017/03/23 Python
python3.5基于TCP实现文件传输
2020/03/20 Python
使用pip发布Python程序的方法步骤
2018/10/11 Python
python+opencv实现阈值分割
2018/12/26 Python
Python求两点之间的直线距离(2种实现方法)
2019/07/07 Python
html5调用摄像头功能的实现代码
2018/05/07 HTML / CSS
阿迪达斯加拿大官网:Adidas加拿大
2016/08/25 全球购物
软件测试工程师笔试题带答案
2015/03/27 面试题
银行门卫岗位职责
2013/12/29 职场文书
幼儿园教研活动总结
2014/04/30 职场文书
党的群众路线教育实践活动总结报告
2014/07/03 职场文书
基层干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
群众路线教育实践活动整改落实情况汇报
2014/10/28 职场文书
劳动争议仲裁代理词
2015/05/25 职场文书
幼儿园大班教学反思
2016/03/02 职场文书
毕业欢送晚会主持词
2019/06/25 职场文书
python如何利用cv2模块读取显示保存图片
2021/06/04 Python
mysql sum(if())和count(if())的用法说明
2022/01/18 MySQL