08 JavaScript基础之--冒泡排序

来源:互联网 发布:数据库性能测试 编辑:程序博客网 时间:2024/05/24 07:41

需求:冒泡排序

思路:写两个for循环,外循环控制轮数,内循环控制次数。看相邻两个元素是否遵循某一规则,如果遵循就交换位置。

排序:
- 从小到大排序:前面比后面大,交换位置。
- 从大到小排序:后面比前面大,就交换位置。

步骤:

  1. 外循环控制轮数(for),轮数为数据个数-1轮;
  2. 内循环控制次数(for),次数为数据个数-1次;
  3. 从小到大:如果前面比后面大,交换位置。

冒泡程序初级版:

    var arr = [7,6,5,4,3,2,1];     //1.外循环控制轮数(for),轮数为数据个数-1轮;    for(var i=0;i<arr.length-1;i++){     //2.内循环控制次数(for),次数为数据个数-1次;     for(var j=0;j<arr.length-1;j++){     //3.从小到大:如果前面比后面大,交换位置。     if(arr[j] > arr[j+1]){     //交换位置。     var temp = arr[j];     arr[j] = arr[j+1];     arr[j+1] = temp;     }     }     }     console.log(arr);

冒泡程序中级版:(进行了比较次数的优化)

var arr = [4,3,7,6,5,2,1];//轮数var m = 0;//次数var n = 0;//1.外循环控制轮数(for),轮数为数据个数-1轮;for(var i=0;i<arr.length-1;i++){//2.内循环控制次数(for),次数为数据个数-1次;                             //每比较一轮少比较一次。因为每轮找出一个最大的                             //而第一轮不能少比较所以用i,第一次为0,然后一次递增。    for(var j=0;j<arr.length-1-i;j++){        //3.从小到大:如果前面比后面大,交换位置。        if(arr[j] > arr[j+1]){            //交换位置。            var temp = arr[j];            arr[j] = arr[j+1];            arr[j+1] = temp;        }        n++;    }    m++;}console.log(arr);console.log(m);console.log(n);

冒泡排序终极版: (优化轮数)

如果整轮比较一次前后位置都没有交换过,那么跳出外循环(跳出轮循环)。

var arr = [1,2,3,4,5,6,7];////轮数var m = 0;//次数var n = 0;//1.外循环控制轮数(for),轮数为数据个数-1轮;for(var i=0;i<arr.length-1;i++){    //开闭原则    var bool = true;    //2.内循环控制次数(for),次数为数据个数-1次;    //优化轮数:如果整轮比较一次前后位置都没有交换过,那么跳出外循环(跳出轮循环)。    for(var j=0;j<arr.length-1-i;j++){        //3.从小到大:如果前面比后面大,交换位置。        if(arr[j] > arr[j+1]){            //交换位置。            var temp = arr[j];            arr[j] = arr[j+1];            arr[j+1] = temp;            //没有排序完毕。(因为前后交换位置了,不确定下次是否还要交换位置。)            bool = false;        }        n++;    }    m++;    //如果是false,只能证明你本轮交换了位置。不能确定下一轮是否交换位置。所以,不能跳出外循环。    //如果是true,说明本轮循环没有一对元素相互交换位置。(已经排序完毕,直接跳出)    if(bool === true){        break;    }}console.log(arr);console.log(m);console.log(n);
0 0