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画ROC曲线和AUC值计算
Sep 19 Python
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
Apr 17 Python
单链表反转python实现代码示例
Feb 08 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
Apr 17 Python
Flask框架学习笔记之消息提示与异常处理操作详解
Aug 15 Python
Django 对IP访问频率进行限制的例子
Aug 30 Python
python 发送json数据操作实例分析
Oct 15 Python
opencv python Canny边缘提取实现过程解析
Feb 03 Python
浅谈Python里面None True False之间的区别
Jul 09 Python
vscode配置anaconda3的方法步骤
Aug 08 Python
Python获取excel内容及相关操作代码实例
Aug 10 Python
Python中三种花式打印的示例详解
Mar 19 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
解决phpmyadmin中文乱码问题。。。
2007/01/18 PHP
zend framework多模块多布局配置
2011/02/26 PHP
百度实时推送api接口应用示例
2014/10/21 PHP
php进行md5加密简单实例方法
2019/09/19 PHP
JavaScript 获得选中文本内容的方法
2009/02/15 Javascript
jquery设置元素的readonly和disabled的写法
2013/09/22 Javascript
jQuery实现异步获取json数据的2种方式
2014/08/29 Javascript
利用a标签自动解析URL分析网址实例
2014/10/20 Javascript
AngularJS入门教程之REST和定制服务详解
2016/08/19 Javascript
Vue渲染函数详解
2017/09/15 Javascript
vue router仿天猫底部导航栏功能
2017/10/18 Javascript
仿淘宝JSsearch搜索下拉深度用法
2018/01/15 Javascript
JS监听滚动和id自动定位滚动
2018/12/18 Javascript
js中事件对象和事件委托的介绍
2019/01/21 Javascript
JS实现在线ps功能详解
2019/07/31 Javascript
解决vuex数据异步造成初始化的时候没值报错问题
2019/11/13 Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
2019/12/31 Javascript
浅析JS中NEW的实现原理及重写
2020/02/20 Javascript
Python 多个图同时在不同窗口显示的实现方法
2019/07/07 Python
在python 中split()使用多符号分割的例子
2019/07/15 Python
python异常触发及自定义异常类解析
2019/08/06 Python
Onzie官网:美国时尚瑜伽品牌
2019/08/21 全球购物
俄罗斯便宜的在线服装商店:GroupPrice
2020/04/10 全球购物
局域网标准
2016/09/10 面试题
会计专业自我鉴定
2014/02/10 职场文书
公司合作协议书范本
2014/04/18 职场文书
协议书模板
2014/04/23 职场文书
关于安全的演讲稿
2014/05/09 职场文书
励志演讲稿800字
2014/08/21 职场文书
2014年初一班主任工作总结
2014/11/08 职场文书
担保贷款承诺书
2015/04/30 职场文书
怎样写观后感
2015/06/19 职场文书
2019年朋友圈经典励志语录50条
2019/07/05 职场文书
警用民用对讲机找不同
2022/02/18 无线电
悬疑名作《朋友游戏》动画无字ED宣传片 新角色公开
2022/04/13 日漫