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共享引用(多个变量引用)示例代码
Dec 04 Python
python中defaultdict的用法详解
Jun 07 Python
Python字符串格式化的方法(两种)
Sep 19 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
Nov 06 Python
Django Rest framework之权限的实现示例
Dec 17 Python
PyCharm安装Markdown插件的两种方法
Jun 24 Python
python sorted函数的小练习及解答
Sep 18 Python
Python实现自定义读写分离代码实例
Nov 16 Python
浅谈python输出列表元素的所有排列形式
Feb 26 Python
Jupyter notebook如何修改平台字体
May 13 Python
Kears 使用:通过回调函数保存最佳准确率下的模型操作
Jun 17 Python
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
May 31 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查看网页源代码的方法
2015/03/13 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
2016/04/02 PHP
Symfony查询方法实例小结
2017/06/28 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
javascript 客户端验证上传图片的大小(兼容IE和火狐)
2009/08/15 Javascript
javascript动画之圆形运动,环绕鼠标运动作小球
2010/07/20 Javascript
Jquery实现简单的动画效果代码
2012/03/18 Javascript
常用的JS验证和函数汇总
2014/12/23 Javascript
JavaScript设计模式初探
2016/01/07 Javascript
学习JavaScript设计模式之模板方法模式
2016/01/20 Javascript
JQuery学习总结【二】
2016/12/01 Javascript
详解如何在React组件“外”使用父组件的Props
2018/01/12 Javascript
layer.open关闭父窗口 以及调用父页面的方法
2018/08/17 Javascript
JavaScript之解构赋值的理解
2019/01/30 Javascript
新手入门带你学习JavaScript引擎运行原理
2019/06/24 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
2019/11/15 Javascript
js绘制一条直线并旋转45度
2020/08/21 Javascript
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
详细讲解Python中的文件I/O操作
2015/05/24 Python
简单讲解Python中的闭包
2015/08/11 Python
Python简单连接MongoDB数据库的方法
2016/03/15 Python
Python numpy.zero() 初始化矩阵实例
2019/11/27 Python
windows10环境下用anaconda和VScode配置的图文教程
2020/03/30 Python
Python基于百度AI实现OCR文字识别
2020/04/02 Python
Lombok插件安装(IDEA)及配置jar包使用详解
2020/11/04 Python
canvas因为图片资源不在同一域名下而导致的跨域污染画布的解决办法
2019/01/18 HTML / CSS
森海塞尔美国官网:Sennheiser耳机与耳麦
2017/07/19 全球购物
Kappa英国官方在线商店:服装和运动器材
2020/11/22 全球购物
瀑布模型都有哪些优缺点
2014/06/23 面试题
经济与贸易专业应届生求职信
2013/11/19 职场文书
英语简历自我评价
2014/01/26 职场文书
平面设计求职信
2014/03/10 职场文书
社区党员志愿服务活动方案
2014/08/18 职场文书
上市公司董事长岗位职责
2015/04/16 职场文书
2015年大学学生会工作总结
2015/05/13 职场文书
深入理解pytorch库的dockerfile
2022/06/10 Python