类别:js / 日期:2023-04-04 / 浏览:538 / 评论:0
冒泡算法的原理:
升序冒泡: 两次循环,相邻元素两两比较,如果前面的大于后面的就交换位置
降序冒泡: 两次循环,相邻元素两两比较,如果前面的小于后面的就交换位置
// 升序冒泡
function maopao(arr) {
const array = [...arr]
for (let i = 0, len = array.length; i < len - 1; i++) {
for (let j = i + 1; j < len; j++) {
if (array[i] > array[j]) {
let temp = array[i]
array[i] = array[j]
array[j] = temp
}
}
}
return array
}
看起来没问题,不过一般生产环境都不用这个,原因是效率低下,冒泡排序在平均和最坏情况下的时间复杂度都是 O(n^2),最好情况下都是 O(n),空间复杂度是 O(1)。因为就算你给一个已经排好序的数组,如[1,2,3,4,5,6] 它也会走一遍流程,白白浪费资源。所以有没有什么好的解决方法呢?答案是肯定有的:加个标识,如果已经排好序了就直接跳出循环。
//优化版
function maopao(arr) {
const array = [...arr]
let isOk = true
for (let i = 0, len = array.length; i < len - 1; i++) {
for (let j = i + 1; j < len; j++) {
if (array[i] > array[j]) {
let temp = array[i]
array[i] = array[j]
array[j] = temp
isOk = false
}
}
if (isOk) {
break
}
}
return array
}
测试结果: 普通冒泡排序时间:0.044ms 优化后冒泡排序时间:0.018ms
版权声明 : 本文未使用任何知识共享协议授权,您可以任何形式自由转载或使用。

发表评论 / 取消回复