冒泡(bubbling)排序是排序就基础的一种,作为前端开发也是必须掌握的,今天我们分析下什么是冒泡算法还有冒泡算法的优化
1、冒泡排序
冒泡排序顾名思义就是利用到气泡的原理,轻的气泡会浮起来,重的就会沉下去,通过两次的遍历,外层负责遍历数组,内层负责比较后更改顺序。通过比较相邻的两项,对于升序,前面大于后面,则换位置;如果是降序,前面小于后面则更换位置。我们通过一个动画就明白比较的顺序和流程。
这是一个图片的形式:
这是一个动画的形式:
我们看下算法的复杂度:
算法名称 | 时间复杂度(平均) | 时间复杂度(最坏) | 时间复杂度(最好) | 空间复杂度 | 稳定性 |
---|---|---|---|---|---|
冒泡排序 | O(n2) | O(n2) | O(n) | O(1) | 稳定 |
通过上面的两个媒介,我们大致可以了解冒泡了把,好不多说废话,上代码
var arr = [1, 2, 3, 45, 23, 28, 6]
for (var i = 0; i < arr.length - 1; i++) {
for (var j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
//前面>后面就是升序,反之降序
arr[j] = arr[j] + arr[j + 1];
arr[j + 1] = arr[j] - arr[j + 1];
arr[j] = arr[j] - arr[j + 1];
}
}
}
console.log(arr)
当然实现两个值的交换也可以用其他的方法:点我
2、优化冒泡算法
就这个数值来说:[1, 2, 3, 45, 23, 28, 6]运行上面的排序得出的排序是这样的
var arr = [1, 2, 3, 45, 23, 28, 6]
for (var i = 0; i < arr.length - 1; i++) {
for (var j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
arr[j] = arr[j] + arr[j + 1];
arr[j + 1] = arr[j] - arr[j + 1];
arr[j] = arr[j] - arr[j + 1];
}
}
//我们打印一下
console.log( i+1 + "+&#