zoukankan      html  css  js  c++  java
  • 冒泡排序

    今天学的主要是冒泡排序中用的开闭原则不太懂,这是我的冒泡排序代码(后两个是对第一个的优化):

    1、冒泡排序的简单实现

    <!DOCTYPE html>
    <html>
    <head lang="en">
    <meta charset="UTF-8">
    <title></title>
    </head>
    <body>

    <script>

    var arr = [3,2,4,6,8,1];
    //步骤:
    //1、利用双重for循环
    //2、外循环控制轮数,内循环控制行数。轮数和次数都是元素个数-1
    //满足某一标准就前后交换位置

    //1、利用双重for循环
    //2、外循环控制轮数,内循环控制行数。轮数和次数都是元素个数-1
    for(var i=0;i<arr.length-1;i++){
    for(var j=0;j<arr.length-1;j++){
    if(arr[j] > arr[j+1]){
    var temp = arr[j];
    arr[j] = arr[j+1];
    arr[j+1] = temp;
    }
    }
    }
    console.log(arr);

    </script>

    </body>
    </html>

    2、冒泡排序升级版--次数优化

    <!DOCTYPE html>
    <html>
    <head lang="en">
    <meta charset="UTF-8">
    <title></title>
    </head>
    <body>

    <script>

    //需求:冒泡排序(升序降序);
    //思路:利用双重for循环。外循环控制轮数,内循环控制次数。轮数和次数都是元素个数-1; 满足某一标准就前后交换位置。
    var arr = [3,2,4,6,8,1];
    //打印轮数和次数
    var m=0;//控制 轮数
    var n=0;//控制 次数(优化:每比较一轮,可以少比较一次)
    //2.外循环控制轮数,内循环控制次数。轮数和次数都是元素个数-1;
    for(var i=0;i<arr.length;i++){
    //j的次数可以减少几次。 (每比较一轮,可以少比较一次)
    //i: 第一轮为0;第二轮为1;第三轮为2;第四轮为3.....
    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自增1
    n++;
    }
    //比较一轮,m自增1
    m++;
    }
    console.log(arr);
    console.log(m);
    console.log(n);


    </script>

    </body>
    </html>

    3、冒泡排序旗舰版--轮数优化

    <!DOCTYPE html>
    <html>
    <head lang="en">
    <meta charset="UTF-8">
    <title></title>
    </head>
    <body>

    <script>

    //需求:冒泡排序(升序降序);
    //思路:利用双重for循环。外循环控制轮数,内循环控制次数。轮数和次数都是元素个数-1; 满足某一标准就前后交换位置。

    var arr = [3,2,4,6,8,1];
    //打印轮数和次数
    var m = 0;//控制 轮数(优化:只要能够断定已经排序完毕,就没有必要再执行下一轮了)
    var n = 0;//控制 次数

    //2.外循环控制轮数,内循环控制次数。轮数和次数都是元素个数-1;
    for(var i=0;i<arr.length-1;i++){
    //开闭原则:
    var bool = true;//默认一个值是true。 默认本轮比较已经全部完成。
    //j的次数可以减少几次。 (每比较一轮,可以少比较一次)
    //i: 第一轮为0;第二轮为1;第三轮为2;第四轮为3.....
    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自增1;
    n++;
    }
    //比较一轮,m自增1
    m++;
    //判断:如果bool被修改了,说明没有排序完毕。如果一次都没有修改,就说明完成排序了。
    if(bool){
    break;
    }
    }
    console.log(arr);
    console.log(m);
    console.log(n);


    </script>

    </body>
    </html>
  • 相关阅读:
    第一章Struts1
    Java
    论坛入口forum.php
    【Discuz系列教程2】论坛入口forum.php
    【Discuz系列教程3】核心函数class_core.php
    discuz 系统函数库function_core注释
    java 每日习题(四)求101-200之间的素数
    java 每日习题(三)兔子问题
    java 每日习题(二) 用decimalFormat格式化输出
    java 每日习题(一)
  • 原文地址:https://www.cnblogs.com/sxd0425/p/6557503.html
Copyright © 2011-2022 走看看