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 相关文章推荐
利用soaplib搭建webservice详细步骤和实例代码
Nov 20 Python
pycharm 使用心得(九)解决No Python interpreter selected的问题
Jun 06 Python
Python调用命令行进度条的方法
May 05 Python
整理Python中的赋值运算符
May 13 Python
python使用in操作符时元组和数组的区别分析
May 19 Python
举例讲解Python中的身份运算符的使用方法
Oct 13 Python
Python编程之微信推送模板消息功能示例
Aug 21 Python
Random 在 Python 中的使用方法
Aug 09 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
Jun 04 Python
Python实现中英文全文搜索的示例
Dec 04 Python
Flask处理Web表单的实现方法
Jan 31 Python
Python访问Redis的详细操作
Jun 26 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
Laravel 4 初级教程之安装及入门
2014/10/30 PHP
Stop SQL Server
2007/06/21 Javascript
可以把编码转换成 gb2312编码lib.UTF8toGB2312.js
2007/08/21 Javascript
jquery弹出框的用法示例(一)
2013/08/26 Javascript
Javascript基础之数组的使用
2016/05/13 Javascript
javascript判断图片是否加载完成的方法推荐
2016/05/13 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
JavaScript中removeChild 方法开发示例代码
2016/08/15 Javascript
javascript实现的左右无缝滚动效果
2016/09/19 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
2016/10/21 Javascript
JavaScript 异步调用
2017/10/25 Javascript
vue-cli webpack2项目打包优化分享
2018/02/07 Javascript
vue中的模态对话框组件实现过程
2018/05/01 Javascript
让Vue也可以使用Redux的方法
2018/05/23 Javascript
angular2路由之routerLinkActive指令【推荐】
2018/05/30 Javascript
vue2.0+SVG实现音乐播放圆形进度条组件
2019/09/21 Javascript
python获取指定路径下所有指定后缀文件的方法
2015/05/26 Python
Python入门_浅谈逻辑判断与运算符
2017/05/16 Python
Python生成任意范围任意精度的随机数方法
2018/04/09 Python
使用Python实现从各个子文件夹中复制指定文件的方法
2018/10/25 Python
Python实现的列表排序、反转操作示例
2019/03/13 Python
pytorch多进程加速及代码优化方法
2019/08/19 Python
Python 继承,重写,super()调用父类方法操作示例
2019/09/29 Python
为什么黑客都用python(123个黑客必备的Python工具)
2020/01/31 Python
使用CSS3的appearance属性改变任何元素的浏览器默认风格
2012/12/24 HTML / CSS
Tomcat Mysql datasource数据源配置
2015/12/28 面试题
中学生自我评价范文
2014/02/08 职场文书
户外拓展活动方案
2014/02/11 职场文书
市场部业务员岗位职责
2014/04/02 职场文书
班主任寄语大全
2014/04/04 职场文书
《埃及的金字塔》教学反思
2014/04/07 职场文书
授权收款委托书范本
2014/10/10 职场文书
个人廉政承诺书
2015/04/28 职场文书
2015年卫生局工作总结
2015/07/24 职场文书
mybatis使用oracle进行添加数据的方法
2021/04/27 Oracle
Python实现科学占卜 让视频自动打码
2022/04/09 Python