1 思想
冒泡排序的原理如下,从第一个元素开始,把当前元素和下一个索引元素进行比较。如果当前元素大,那么就交换位置,重复操作直到比较到最后一个元素,那么此时最后一个元素就是该数组中最大的数。下一轮重复以上操作,但是此时最后一个元素已经是最大数了,所以不需要再比较最后一个元素,只需要比较到 length - 1 的位置。
2 时间空间复杂度
1 时间复杂度
该算法的操作次数是一个等差数列 n + (n - 1) + (n - 2) + …+ 1 ,去掉常数项以后得出时间复杂度是 O(n * n)
最好的情况:T(n)= O(n) 当输入的数据已经是正序时
最坏的情况,T(n)= O(n2) 当输入的数据是反序的时候
平均情况:T(n)= O(n2)
3 代码
function bubble(array){
if(!array || array.length < 2){//检查数组的长度或者是否为空
return array;
}
for(let i = array.length - 1; i >= 0; i--){//外层控制的是执行的次数以及内层的j最大值
for(let j = 0; j <= i; j++){ //每一躺从0到j
if(array[j] > array[j + 1]){
[array[j], array[j + 1]] = [array[j + 1], array[j]];
}
}
}
/* 冒泡排序,从零开始遍历,直到比较到最后一个元素,下一趟也是从零开始,直到倒数第二个
for(let i = 0; i < array.length; i++){//外层控制的是执行的次数以及内层的j最大值
for(let j = 0; j < array.length - i; j++){
if(array[j] > array[j + 1]){
[array[j], array[j + 1]] = [array[j + 1], array[j]];
}
}
}
* */
return array;
}
let arr = [1, 9, 8, 7];
let result = bubble(arr);
console.log(result);
参考:https://juejin.im/post/5ba34e54e51d450e5162789b#heading-91
百里于2020年5月2日
如果有错,请您指出!如有侵权,请联系我删除!