冒泡排序- 维基百科,自由的百科全书 - Wikipedia
文章推薦指數: 80 %
冒泡排序(英语:Bubble Sort)又称为泡式排序,是一种简单的排序算法。
它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。
冒泡排序
维基百科,自由的百科全书
跳到导航
跳到搜索
此条目没有列出任何参考或来源。
(2020年6月13日)维基百科所有的内容都应该可供查证。
请协助补充可靠来源以改善这篇条目。
无法查证的内容可能会因为异议提出而移除。
冒泡排序使用冒泡排序为一列数字进行排序的过程概况类别排序算法资料结构数组复杂度平均时间复杂度
O
(
n
2
)
{\displaystyleO(n^{2})}
最坏时间复杂度
O
(
n
2
)
{\displaystyleO(n^{2})}
最优时间复杂度
O
(
n
)
{\displaystyleO(n)}
空间复杂度总共
O
(
n
)
{\displaystyleO(n)}
,需要辅助空间
O
(
1
)
{\displaystyleO(1)}
最佳解No相关变量的定义
冒泡排序
冒泡排序(英语:BubbleSort)又称为泡式排序,是一种简单的排序算法。
它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。
走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
冒泡排序对
n
{\displaystylen}
个项目需要O(
n
2
{\displaystylen^{2}}
)的比较次数,且可以原地排序。
尽管这个演算法是最简单了解和实作的排序算法之一,但它对于包含大量的元素的数列排序是很没有效率的。
冒泡排序是与插入排序拥有相等的渐近时间复杂度,但是两种算法在需要的交换次数却很大地不同。
在最坏的情况,冒泡排序需要
O
(
n
2
)
{\displaystyleO(n^{2})}
次交换,而插入排序只要最多
O
(
n
)
{\displaystyleO(n)}
交换。
冒泡排序的实现(类似下面)通常会对已经排序好的数列拙劣地执行(
O
(
n
2
)
{\displaystyleO(n^{2})}
),而插入排序在这个例子只需要
O
(
n
)
{\displaystyleO(n)}
个运算。
因此很多现代的演算法教科书避免使用冒泡排序,而用插入排序取代之。
冒泡排序如果能在内部回圈第一次执行时,使用一个旗标来表示有无需要交换的可能,也可以把最优情况下的复杂度降低到
O
(
n
)
{\displaystyleO(n)}
。
在这个情况,已经排序好的数列就无交换的需要。
若在每次走访数列时,把走访顺序反过来,也可以稍微地改进效率。
有时候称为鸡尾酒排序,因为演算法会从数列的一端到另一端之间穿梭往返。
冒泡排序演算法的运作如下:
比较相邻的元素。
如果第一个比第二个大,就交换它们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。
这步做完后,最后的元素会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
由于它的简洁,冒泡排序通常被用来对于程式设计入门的学生介绍演算法的概念。
目录
1伪代码
2助记码
3实作范例
3.1C语言
3.2C++
3.3C#
3.4JAVA
3.5Ruby
3.6JavaScript
3.7Pascal
3.8Python
3.9VB.NET
3.10PHP
3.11Rust
3.12Go
3.13Objective-C
3.14Swift
3.15Shell
3.16IDL
4外部链接
伪代码[编辑]
functionbubble_sort(array,length){
vari,j;
for(ifrom0tolength-1){
for(jfrom0tolength-1-i){
if(array[j]>array[j+1])
swap(array[j],array[j+1])
}
}
}
函数冒泡排序输入一个数组名称为array其长度为length
i从0到(length-1)
j从0到(length-1-i)
如果array[j]>array[j+1]
交换array[j]和array[j+1]的值
如果结束
j循环结束
i循环结束
函数结束
助记码[编辑]
i∈[0,N-1)//循环N-1遍
j∈[0,N-1-i)//每遍循环要处理的无序部分
swap(j,j+1)//两两排序(升序/降序)
实作范例[编辑]
C语言[编辑]
#include
延伸文章資訊
- 1algorithm-excercise/bubble_sort.md at master - GitHub
核心:冒泡,持续比较相邻元素,大的挪到后面,因此大的会逐步往后挪,故称之为冒泡。 Bubble Sort. Reference. 冒泡排序- 维基百科,自由的百科全书.
- 2冒泡排序- 维基百科,自由的百科全书 - Wikipedia
冒泡排序(英语:Bubble Sort)又称为泡式排序,是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。
- 3排序简介 - OI Wiki
基数排序、计数排序、插入排序、冒泡排序、归并排序是稳定排序。 选择排序、堆排序、快速排序 ... 外部链接¶. 排序算法- 维基百科,自由的百科全书 ...
- 4时间复杂度转载自维基百科3_alittlewhitea的博客
维基百科,自由的百科全书. 在计算机科学中,算法的时间复杂度是一个函数,它 ... 冒泡排序、插入排序 ... 例如,矩阵链排序可以通过一个PRAM模型.
- 5侏儒排序- 维基百科,自由的百科全书
此后Dick Grune(英语:Dick Grune)也描述了这一算法,称其为“侏儒排序”。此算法类似于插入排序,但是移动元素到它该去的位置是通过一系列类似冒泡排序的移动实现的。从 ...