冒泡排序(英语:Bubble Sort)又称为泡式排序,是一种简单的排序算法。
它重复地走访过要排序的数列,一次比较两个元素,
如果他们的顺序错误就把他们交换过来。
走访数列的工作是重复地进行直到没有再需要交换,
也就是说该数列已经排序完成。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
解释
以上是 维基百科 关于冒泡的描述,转换为人话就是大概这么几条:
- 冒泡排序是排序算法中较简单的算法
- 每个元素依次去比较,如果大于下个值,则做值的交换。最终实现将最大值冒泡至顶端
冒泡排序是一种比较算法
,默认由小到大
进行排序,比较符合人类思维。就是拿当前值
和下一个值
去做比较。如果当前值小于下一个值,则表示正常顺序,不做处理。如果当前值大于
下一个值,则它们两个的值做swap
(交换)。
这样就保证了每次遍历后的最大值
都是在队列(或者数组)的最右边
, 所以,每当确定一个最大值
,就固定
了最右边的最大值,那么该值之后就不需
再做判断。所以随着不断遍历
,序列(或者数组)中已排好序的元素在不断增加
,未排序的元素在不断减小
。最终 实现冒泡排序
。
JS实现
const bubble_sort = arr => {
for (let i = arr.length; i >= 1; i--) {
// i >= 1: 最后一个元素不用做判断
for (let j = 0; j <= i; j++) {
// 双层判断 i在不断减小 排好序的元素在不断增大
if (arr[j] < arr[j - 1]) {
// 当前元素 小于 上一个元素
// 值做交换
swap(arr, j, j - 1);
}
}
}
};
// 两个值交换函数
const swap = (arr, x, y) => {
let temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
};
由上可见,冒泡排序
十分的简单。通过两个for循环
即可完成。但是它的时间复杂度
是O(n²)
,性能上很一般。
测试一下
let arr = [3, 2, 6, 1, 9, 123, 12, 15, 60];
bubble_sort(arr);
console.log(arr);
// [ 1, 2, 3, 6, 9, 12, 15, 60, 123 ]
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。