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实现基于HTTP文件传输实例
Nov 08 Python
Python中下划线的使用方法
Mar 27 Python
python统计文本文件内单词数量的方法
May 30 Python
Python OpenCV实现图片上输出中文
Jan 22 Python
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
May 11 Python
浅谈Python采集网页时正则表达式匹配换行符的问题
Dec 20 Python
Django使用Jinja2模板引擎的示例代码
Aug 09 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
Aug 27 Python
python类的实例化问题解决
Aug 31 Python
Python openpyxl 插入折线图实例
Apr 17 Python
Python获取android设备cpu和内存占用情况
Nov 15 Python
Python之matplotlib绘制饼图
Apr 13 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
数据库中排序的对比及使用条件详解
2012/02/23 PHP
解析php常用image图像函数集
2013/06/24 PHP
PHP利用REFERER根居访问来地址进行页面跳转
2013/09/28 PHP
php文件上传简单实现方法
2015/01/24 PHP
php设计模式之单例模式代码
2016/06/11 PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
2016/11/10 PHP
PHP手机短信验证码实现流程详解
2018/05/17 PHP
php创建多级目录与级联删除文件的方法示例
2019/09/12 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
关于火狐(firefox)及ie下event获取的两种方法
2012/12/27 Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
2013/12/29 Javascript
js模拟hashtable的简单实例
2014/03/06 Javascript
使用js画图之画切线
2015/01/12 Javascript
基于BootStrap实现简洁注册界面
2017/07/20 Javascript
微信小程序实现选项卡功能
2020/06/19 Javascript
代码详解Vuejs响应式原理
2017/12/20 Javascript
Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定
2019/04/29 Javascript
10种JavaScript最常见的错误(小结)
2019/06/21 Javascript
使用 webpack 插件自动生成 vue 路由文件的方法
2019/08/20 Javascript
js实现头像上传并且可预览提交
2020/12/25 Javascript
多种类型jQuery网页验证码插件代码实例
2021/01/09 jQuery
videocapture库制作python视频高速传输程序
2013/12/23 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
Tornado 多进程实现分析详解
2018/01/12 Python
python实现csv格式文件转为asc格式文件的方法
2018/03/23 Python
使用 python pyautogui实现鼠标键盘控制功能
2019/08/04 Python
Python 图像对比度增强的几种方法(小结)
2019/09/25 Python
Python MySQL 日期时间格式化作为参数的操作
2020/03/02 Python
详解Python爬虫爬取博客园问题列表所有的问题
2021/01/18 Python
东方电视购物:东方CJ
2016/10/12 全球购物
美国专营婴幼儿用品的购物网站:buybuy BABY
2017/01/01 全球购物
Linux如何压缩可执行文件
2014/03/27 面试题
课外小组活动总结
2014/08/27 职场文书
培训师岗位职责
2015/02/14 职场文书
python解决12306登录验证码的实现
2021/04/18 Python
Windows Server 2019 配置远程控制以及管理方法
2022/04/28 Servers