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变量作用范围实例分析
Jul 07 Python
简介二分查找算法与相关的Python实现示例
Aug 26 Python
十个Python程序员易犯的错误
Dec 15 Python
利用Python实现网络测试的脚本分享
May 26 Python
Django与JS交互的示例代码
Aug 23 Python
Python面向对象编程基础解析(二)
Oct 26 Python
PyQt打开保存对话框的方法和使用详解
Feb 27 Python
如何让PyQt5中QWebEngineView与JavaScript交互
Oct 21 Python
通过python-pptx模块操作ppt文件的方法
Dec 26 Python
Python基础详解之描述符
Apr 28 Python
python百行代码实现汉服圈图片爬取
Nov 23 Python
Python实现照片卡通化
Dec 06 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
在PHP3中实现SESSION的功能(二)
2006/10/09 PHP
一个比较简单的PHP 分页分组类
2009/12/10 PHP
PHP页面中文乱码分析
2013/10/29 PHP
利用php输出不同的心形图案
2016/04/22 PHP
php file_get_contents取文件中数组元素的方法
2017/04/01 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
javascript实现 在光标处插入指定内容
2007/05/25 Javascript
分享27个jQuery 表单插件集合推荐
2011/04/25 Javascript
jQuery遍历Form示例代码
2013/09/03 Javascript
jQuery操作DOM之获取表单控件的值
2015/01/23 Javascript
微信小程序 选择器(时间,日期,地区)实例详解
2016/11/16 Javascript
JS定时器实现数值从0到10来回变化
2016/12/09 Javascript
Angular2实现自定义双向绑定属性
2017/03/22 Javascript
浅谈Angular4中常用管道
2017/09/27 Javascript
如何利用@angular/cli V6.0直接开发PWA应用详解
2018/05/06 Javascript
微信小程序支付功能 php后台对接完整代码分享
2018/06/12 Javascript
vue cli 3.0 使用全过程解析
2018/06/14 Javascript
webpack4 处理CSS的方法示例
2018/09/03 Javascript
vue实现的请求服务器端API接口示例
2019/05/25 Javascript
jQuery中event.target和this的区别详解
2020/08/13 jQuery
微信小程序自定义底部弹出框动画
2020/11/18 Javascript
python的几种开发工具介绍
2007/03/07 Python
编写Python脚本使得web页面上的代码高亮显示
2015/04/24 Python
Python对列表排序的方法实例分析
2015/05/16 Python
Django实现图片文字同时提交的方法
2015/05/26 Python
Python mutiprocessing多线程池pool操作示例
2019/01/30 Python
python opencv实现信用卡的数字识别
2020/01/12 Python
python实现从ftp服务器下载文件
2020/03/03 Python
如何快速一次性卸载所有python包(第三方库)呢
2020/10/20 Python
一些关于MySql加速和优化的面试题
2014/01/30 面试题
2014年应届大学生自我评价
2014/01/09 职场文书
大二学生职业生涯规划书
2014/02/05 职场文书
保险公司年会主持词
2014/03/22 职场文书
行政秘书工作自我鉴定
2014/09/15 职场文书
运动会搞笑广播稿
2014/10/14 职场文书
新生入学欢迎词
2015/01/26 职场文书