让你轻松理解冒泡排序

135 阅读2分钟

冒泡排序

// 数组需要由小到大排列 ??

//通过sort排序  用的很多 也是最简单的
var arr = [5,4,6,2];
var newArr=arr.sort(function(a,b){
         return a-b;
}) 
console.log(newArr);//(4)[2,4,5,6]
//通过冒泡排序怎么解决呢?思路是什么?
//比较数组的前一项和后一项的大小,如果前一项比后一项大,那么就互换位置,用循环。
var arr = [5,4,6,2];
//前一项5和后一项4比较  5>4    互换位置[4,5,6,2]  (比较的是第一项和第二项)
//前一项5和后一项6比较  5<6    不互换位置[4,5,6,2]  (比较的是第二项和第三项)
//前一项6和后一项2比较  6>2    互换位置[4,3,2,6]  (比较的是第三项和第四项)
var arr = [5,4,6,2];
for (var i=0;i<arr.length-1;i++){
    console.log("前一项", arr[i], "后一项", arr[i + 1]);
    
    if(arr[i]>arr[i+1]){
        var arrx=arr[i];//前一项和后一项对比 前面大的值会调到后面一项
        arr[i]=arr[i+1];
        arr[i+1]=arrx;
    }
    console.log(arr)
}
console.log("第一次",arr);//第一次 (4) [4, 5, 2, 6]   
//第一次结果就是最大值会放到最后边了
var arr = [5,4,6,2];
//var arr = [4,5,2];//除掉最后一项最大的6  所以arr.length-1-1
for (var i=0;i<arr.length-1-1;i++){
    console.log("前一项", arr[i], "后一项", arr[i + 1]);
    
    if(arr[i]>arr[i+1]){
        var arrx=arr[i];//前一项和后一项对比 前面大的值会调到后面一项
        arr[i]=arr[i+1];
        arr[i+1]=arrx;
    }
    console.log(arr)
}
console.log("第二次",arr);//第二次 (3) [4, 2, 5]
//第二次结果就是第二个最大值会放到最后边了
var arr = [5,4,6,2];
//var arr = [4,2];//除掉第二大的5  所以arr.length-1-1-1
for (var i=0;i<arr.length-1-1-1;i++){
    console.log("前一项", arr[i], "后一项", arr[i + 1]);
    
    if(arr[i]>arr[i+1]){
        var arrx=arr[i];//前一项和后一项对比 前面大的值会调到后面一项
        arr[i]=arr[i+1];
        arr[i+1]=arrx;
    }
    console.log(arr)
}
console.log("第三次",arr);//第三次 (2) [2, 4]

做到这里是不是想到了什么???对 重复代码这么多??用一个循环搞定

var arr = [5,4,6,2];
for(j=0;j<arr.length-1;j++){ 
//j<arr.length-1为什么减1,因为比如数组长度为4,其实对比3次排序结果就出来了。
    for (var i=0;i<arr.length-1-j;i++){
    // console.log("前一项", arr[i], "后一项", arr[i + 1]);
    
    if(arr[i]>arr[i+1]){
        // 那么把大的放在后面,其实就是前一项和后一项互换位
        var arrx=arr[i];
        arr[i]=arr[i+1];
        arr[i+1]=arrx;
    }
    // console.log(arr);
}
}      
console.log(arr);//(4)[2,4,5,6]

总结核心: 比较前一项 和后一项 如果前一项 大于后一项 那么 就互换位置;