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中的MongoDB基本操作:连接、查询实例
Feb 13 Python
django rest framework之请求与响应(详解)
Nov 06 Python
Python2.X/Python3.X中urllib库区别讲解
Dec 19 Python
python读出当前时间精度到秒的代码
Jul 05 Python
python爬虫的一个常见简单js反爬详解
Jul 09 Python
使用python绘制cdf的多种实现方法
Feb 25 Python
Python3开发环境搭建详细教程
Jun 18 Python
Python魔术方法专题
Jun 19 Python
Python CategoricalDtype自定义排序实现原理解析
Sep 11 Python
用python查找统一局域网下ip对应的mac地址
Jan 13 Python
python 遍历磁盘目录的三种方法
Apr 02 Python
python自动化调用百度api解决验证码
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
国产PHP开发框架myqee新手快速入门教程
2014/07/14 PHP
php析构函数的简单使用说明
2015/08/24 PHP
PHP中的随机性 你觉得自己幸运吗?
2016/01/22 PHP
Netbeans 8.2与PHP相关的新特性介绍
2016/10/08 PHP
php实现博客,论坛图片防盗链的方法
2016/10/15 PHP
PHP中Session ID的实现原理实例分析
2019/08/17 PHP
PHPUnit + Laravel单元测试常用技能
2019/11/06 PHP
采用call方式实现js继承
2014/05/20 Javascript
JQuery对表单元素的基本操作使用总结
2014/07/18 Javascript
javascript实现的淘宝旅行通用日历组件用法实例
2015/08/03 Javascript
JS产生随机数的几个用法详解
2016/06/22 Javascript
BootStrap与validator 使用笔记(JAVA SpringMVC实现)
2016/09/21 Javascript
详解堆的javascript实现方法
2016/11/29 Javascript
Javascript中字符串replace方法的第二个参数探究
2016/12/05 Javascript
Vue2.0组件间数据传递示例
2017/03/07 Javascript
详解Angular 4.x NgTemplateOutlet
2017/05/24 Javascript
详解webpack+angular2开发环境搭建
2017/06/28 Javascript
vue router demo详解
2017/10/13 Javascript
Nuxt.js之自动路由原理的实现方法
2018/11/21 Javascript
详解关于Angular4 ng-zorro使用过程中遇到的问题
2018/12/05 Javascript
vue实现Excel文件的上传与下载功能的两种方式
2019/06/28 Javascript
vue项目,代码提交至码云,iconfont的用法说明
2020/07/30 Javascript
举例区分Python中的浅复制与深复制
2015/07/02 Python
Django中cookie的基本使用方法示例
2018/02/03 Python
python mac下安装虚拟环境的图文教程
2019/04/12 Python
Python语法分析之字符串格式化
2019/06/13 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
2020/06/09 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
2020/06/17 Python
巴西儿童时尚购物网站:Dinda
2019/08/14 全球购物
体育教师个人的自我评价
2014/02/16 职场文书
元旦晚会策划方案
2014/02/18 职场文书
竞选班干部演讲稿
2014/04/24 职场文书
集体生日活动方案
2014/08/18 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书
企业管理不到位检讨书
2019/06/27 职场文书
python3操作redis实现List列表实例
2021/08/04 Python