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列表操作使用示例分享
Feb 21 Python
python基础教程之简单入门说明(变量和控制语言使用方法)
Mar 25 Python
利用python爬取斗鱼app中照片方法实例
Dec 03 Python
Python入门之后再看点什么好?
Mar 05 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
Sep 03 Python
Python 获取div标签中的文字实例
Dec 20 Python
python实现批量注册网站用户的示例
Feb 22 Python
python实现电子产品商店
Feb 26 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
Apr 18 Python
NumPy 基本切片和索引的具体使用方法
Apr 24 Python
用Python画小女孩放风筝的示例
Nov 23 Python
PyCharm 2019.3发布增加了新功能一览
Dec 08 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
thinkphp3.0输出重复两次的解决方法
2014/12/19 PHP
PHP strcmp()和strcasecmp()的区别实例
2016/11/05 PHP
js+FSO遍历文件夹下文件并显示
2007/03/07 Javascript
来自chinaz的ajax获取评论代码
2008/05/03 Javascript
node.js中的buffer.fill方法使用说明
2014/12/14 Javascript
jquery利用命名空间移除绑定事件的方法
2015/03/11 Javascript
详解Javascript ES6中的箭头函数(Arrow Functions)
2016/08/24 Javascript
Javascript oop设计模式 面向对象编程简单实例介绍
2016/12/13 Javascript
详谈$.data()的用法和作用
2017/02/13 Javascript
详解Vue.js分发之作用域槽
2017/06/13 Javascript
微信小程序switch组件使用详解
2018/01/31 Javascript
为jquery的ajax请求添加超时timeout时间的操作方法
2018/09/04 jQuery
解决vue-cli脚手架打包后vendor文件过大的问题
2018/09/27 Javascript
示例vue 的keep-alive缓存功能的实现
2018/12/13 Javascript
微信小程序如何连接Java后台
2019/08/08 Javascript
Python+django实现文件上传
2016/01/17 Python
Python实现批量检测HTTP服务的状态
2016/10/27 Python
Python网络编程 Python套接字编程
2017/09/13 Python
python3读取csv和xlsx文件的实例
2018/06/22 Python
Python实现的栈、队列、文件目录遍历操作示例
2019/05/06 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
2019/08/12 Python
Python装饰器结合递归原理解析
2020/07/02 Python
CSS3实现曲线阴影和翘边阴影
2016/05/03 HTML / CSS
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
生产车间主管岗位职责
2013/12/28 职场文书
石油大学毕业生自荐信
2014/01/28 职场文书
优秀老师事迹材料
2014/02/05 职场文书
十佳护士获奖感言
2014/02/18 职场文书
校园联欢晚会主持词
2014/03/17 职场文书
开学典礼演讲稿
2014/05/23 职场文书
品牌推广策划方案
2014/05/28 职场文书
销售口号霸气押韵
2015/12/24 职场文书
python制作图形界面的2048游戏, 基于tkinter
2021/04/06 Python
python实现高效的遗传算法
2021/04/07 Python
python实现剪贴板的操作
2021/07/01 Python
gojs实现蚂蚁线动画效果
2022/02/18 Javascript