博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
冒泡排序(bubble sort)
阅读量:7031 次
发布时间:2019-06-28

本文共 1515 字,大约阅读时间需要 5 分钟。

[简介]

  冒泡排序英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

 

[算法复杂度] 

  冒泡排序对n个项目需要O(n^{2})的比较次数,且可以原地排序。尽管这个算法是最简单了解和实现的排序算法之一,但它对于少数元素之外的数列排序是很没有效率的。

  冒泡排序是与插入排序拥有相等的运行时间,但是两种算法在需要的交换次数却很大地不同。在最好的情况,冒泡排序需要O(n^{2})次交换,而插入排序只要最多O(n)交换。冒泡排序的实现(类似下面)通常会对已经排序好的数列拙劣地运行O(n^{2})次运算,而插入排序在这个例子只需要O(n)次运算。

  冒泡排序如果能在内部循环第一次运行时,使用一个旗标来表示有无需要交换的可能,也可以把最好的复杂度降低到O(n)。在这个情况,已经排序好的数列就无交换的需要。

 

[核心算法]

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

 

[口诀]

  冒泡冒泡,大数下沉,小数上冒

  N -  1轮,两两比较

  相邻换位,我停你跑

  每轮计算,步数减少

 

[Source code]

# coding=utf-8ALIST = [6, 5, 3, 1, 8, 7, 2, 4] # bubble sort"""Description:    From head to tail, swap each neighbor if previous one is larger than later one    The largest one in each round will be found ant put into corresponding position        冒泡冒泡,大数下沉,小数上冒    N  - 1轮,两两比较    相邻换位,我停你跑    每轮计算,步数减少"""""" 助记码 i∈[0,N-1)                //循环N-1遍   j∈[0,N-1-i)            //每遍循环要处理的无序部分     swap(j,j+1)          //两两排序(升序/降序)"""def bubble_sort(alist=None):    blist = alist[:]    N = len(blist)    # Need N - 1 round to compare    for i in range(0, N - 1):        # In each round, need "N - i" step(s)        for j in range(0, N - 1 - i):            if blist[j] > blist[j + 1]:                blist[j], blist[j + 1] = blist[j + 1], blist[j]    return blist    print "Final result: ", bubble_sort(ALIST)

 

[示意图]

 

转载于:https://www.cnblogs.com/Ice-Max/p/5803196.html

你可能感兴趣的文章
APP接口基础学习一
查看>>
设计模式 策略模式 以角色游戏为背景
查看>>
【转】CSS和SVG中的剪切——clip-path属性和<clipPath>元素
查看>>
【C语言入门教程】5.4 递归
查看>>
UVALive 6915 Leveling Ground 倍增RMQ
查看>>
Inside ARC — to see the code inserted by the compiler
查看>>
云中气象 有备而来
查看>>
4.dubbo-demo+简易监控中心安装+管理控制台安装
查看>>
读书笔记《集体智慧编程》Chapter 4 : Searching and Ranking
查看>>
jquery form 插件 分类: JavaScript ...
查看>>
php二维数组访问
查看>>
用Shell实现俄罗斯方块代码(Tetris.sh)
查看>>
[zz]Ubuntu Hadoop HDFS 配置
查看>>
上市后Avaya锣鼓全开,加速战略布局规划
查看>>
日调度5万亿次,腾讯云发布企业级微服务中间件TSF
查看>>
海外侨胞建言四川对外开放:加强内陆省份竞争力成关键
查看>>
2019款奥迪Q7上市 配置增加/69.98万元起售
查看>>
策划求婚、陪挑婚纱,新郎不是我,仍感谢你来过|在百度遇见你
查看>>
从零单排学Redis【铂金一】
查看>>
如何处理Express异常
查看>>