JavaScript算法之冒泡排序及其优化
冒泡排序的英文是bubble sort 他是一种很基础的交换排序算法。
我们平时看到的小气泡会不断的向上漂浮,然后这种算法中的每一个元素都可以像小气泡一样朝着一个方向不断移动,可能就这样取名为冒泡排序
冒泡排序的思想主要是将相邻的元素两两比较,当一个大于右侧相邻元素的时候,就交换他们的位置;如果小于或者等于的话,位置就不变,可以通过这个动图非常直观的去理解这种思路
接下来我们用代码去实现
var arr = [7,3,1,6,8,9,10,2,4,5];
console.log(arr);
for(var i = 0 ; i < arr.length-1; i++){
//每一轮遍历所有元素,总共遍历 所有元素-1 次 所以平均时间复杂度为O(n^2);
for(var j = 0 ; j < arr.length -i -1; j++){
let t = 0;
if(arr[j]>arr[j+1]){
t = arr[j];
arr[j] = arr[j+1];
arr[j+1] = t;
}
}
}
console.log(arr);
此时乱序的数组已经排序完毕
优化:
通过动图我们可以发现,在排序结束之前,数列已经是有序的了,但是算法还是执行了一遍,这个时候如果能够提前判断数列有序了,然后记录下来,这样就不会执行多余的操作了。
for( var i = 0 ; i<arr.length-1; i++){
var isSorted = true; //定义一个布尔值,来作为标记,每一轮的初始值都是true
for( var j = 0 ; j<arr.length - i -1 ; j ++){
let t = 0;
if( arr[j]> arr[j+1]){
t = arr[j];
arr[j] = arr[j+1];
arr[j+1] = t ;
isSorted = false;
//此时如果发生了交换,那么就可以证明,此时数列不是有序的,标记为false
}
}
if(isSorted){
break;
}
}