JavasScript中的冒泡排序


冒泡排序:就是将一个数组中的元素按照从大到小或者从小到大的顺序进行排列。

var array=[9,8,7,6,5,4,3,2,1];

第一轮比较:8,7,6,5,4,3,2,1,9      交换了8次        i=0  j=array.length-1-i

第二轮比较:7,6,5,4,3,2,1,8,9      交换了7次        i=1  j=array.length-1-i

第三轮比较:6,5,4,3,2,1,7,8,9      交换了6次        i=2  j=array.length-1-i

第四轮比较:5,4,3,2,1,6,7,8,9      交换了5次        i=3  j=array.length-1-i

第五轮比较:4,3,2,1,5,6,7,8,9      交换了4次        i=4  j=array.length-1-i

第六轮比较:3,2,1,4,5,6,7,8,9      交换了3次        i=5  j=array.length-1-i

第七轮比较:2,1,3,4,5,6,7,8,9      交换了2次        i=6  j=array.length-1-i

第八轮比较:1,2,3,4,5,6,7,8,9      交换了1次        i=7  j=array.length-1-i

代码实现:

var  temp;
var array=[9,8,7,6,5,4,3,2,1];
//外循环控制轮数
for(var i=0;i<array.length-1;i++){
//内循环控制比较次数
    for(var j=0;j<array.length-1-i;j++){
        if(array[j]>array[j+1]){
            //交换两个变量
            temp=array[j];
            array[j]=array[j+1];
            array[j+1]=temp;
        }
    }
}

console.log(array);

代码优化:

var  temp,bool,m=0;
var array=[9,8,7,6,5,4,3,2,1];
for(var i=0;i<array.length-1;i++){
    //开闭原则中的开关
    bool = true;
    for(var j=0;j<array.length-1-i;j++){
        if(array[j]>array[j+1]){
            //交换两个变量
            temp=array[j];
            array[j]=array[j+1];
            array[j+1]=temp;
            bool=false;//将开关关闭
        }
    }
    //如果内循环中的if没有被执行(开关关闭,执行下面的语句);
    if(bool){
        break;
    }
    m++;
}
console.log(array+",比较"+m+"轮");

备注:比较轮数最好情况为0轮,最坏为8轮

本文永久更新链接地址

相关内容