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排序搜索基本算法之冒泡排序实例分析
Dec 09 Python
python之matplotlib学习绘制动态更新图实例代码
Jan 23 Python
详解用TensorFlow实现逻辑回归算法
May 02 Python
python3调用百度翻译API实现实时翻译
Aug 16 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
Dec 20 Python
Python企业编码生成系统之系统主要函数设计详解
Jul 26 Python
在django中使用apscheduler 执行计划任务的实现方法
Feb 11 Python
10行Python代码实现Web自动化管控的示例代码
Aug 14 Python
Django admin组件的使用
Oct 24 Python
Python 中的函数装饰器和闭包详解
Feb 06 Python
Python Pandas pandas.read_sql函数实例用法
Jun 21 Python
python中数组和列表的简单实例
Mar 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
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
PHP 下载文件时自动添加bom头的方法实例
2014/01/10 PHP
PHP常用处理静态操作类
2015/04/03 PHP
支持中文、字母、数字的PHP验证码
2015/05/04 PHP
简单解决新浪SAE无法上传文件的问题
2015/05/13 PHP
javascript 系统文件夹文件操作及参数介绍
2013/01/08 Javascript
优化Jquery,提升网页加载速度
2013/11/14 Javascript
jQuery实现动画效果的简单实例
2014/01/27 Javascript
Bootstrap模态框调用功能实现方法
2016/09/19 Javascript
webpack打包js的方法
2018/03/12 Javascript
关于AngularJS中ng-repeat不更新视图的解决方法
2018/09/30 Javascript
详解使用JWT实现单点登录(完全跨域方案)
2019/08/02 Javascript
微信小程序实现打开并下载服务器上面的pdf文件到手机
2019/09/20 Javascript
[59:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第二局
2016/03/04 DOTA
在Python的Django框架中用流响应生成CSV文件的教程
2015/05/02 Python
使用Python抓取豆瓣影评数据的方法
2018/10/17 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
Python3实现的反转单链表算法示例
2019/03/08 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
2019/06/28 Python
Python合并2个字典成1个新字典的方法(9种)
2019/12/19 Python
CSS3中的常用选择器使用示例整理
2016/06/13 HTML / CSS
HTML5到底会有什么发展?HTML5的前景展望
2015/07/07 HTML / CSS
库存图片、照片、矢量图、视频和音乐:Shutterstock
2021/02/12 全球购物
请描述一下”is a”关系和”has a”关系
2015/02/03 面试题
电子商务专业个人的自我评价
2013/11/19 职场文书
单位在职证明范本
2014/01/09 职场文书
保险专业自荐信范文
2014/02/20 职场文书
数控专业毕业生自荐信范文
2014/03/04 职场文书
中学生操行评语
2014/04/24 职场文书
颂军魂爱军营演讲稿
2014/09/13 职场文书
民事诉讼代理委托书
2014/10/08 职场文书
求职信范文怎么写
2015/03/19 职场文书
2016党员学习《反对自由主义》心得体会
2016/01/22 职场文书
Python自动化爬取天眼查数据的实现
2021/06/15 Python
MySQL 数据恢复的多种方法汇总
2021/06/21 MySQL
7个关于Python的经典基础案例
2021/11/07 Python