zoukankan      html  css  js  c++  java
  • 如何实现冒泡排序

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6 </head>
     7 
     8 <body>
     9 <script>
    10     var arr = [3,2,4,1,5];
    11 
    12     /*
    13     * 每次循环比较,取出当前的值和他的下一位进行大小的比较,如果当前值比下一个要大(小),交换位置,每次循环确定一个最大(最小)数
    14     *
    15     * 因为每次比较的数列中,最后一个没有下一位,所以最后一次没有必要再参与比较,所以每次循环比较的次数是要比较的数列元素个数-1次
    16     * */
    17     for (var i=0; i<arr.length-1; i++) {
    18 
    19         // 获取当前位的值
    20         var a = arr[i];
    21         // 获取下一位的值
    22         var b = arr[i+1];
    23 
    24         // 这里我们以小值在后,如果a小于b交换位置
    25         if (a < b) {
    26             arr[i] = b;
    27             arr[i+1] = a;
    28         }
    29 
    30     }
    31 
    32     // 进过上面的一轮循环,就确定这个数列中需要比较的值中最小的值
    33     console.log(arr);
    34 
    35 </script>
    36 </body>
    37 </html>
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6 </head>
     7 
     8 <body>
     9 <script>
    10 //    var arr = [3,2,4,1,5];
    11 
    12     var arr = [];
    13     for (var i=0; i<30000; i++) {
    14         arr.push(i);
    15     }
    16     arr.sort(function () {
    17         return Math.random() - 0.5;
    18     });
    19 
    20     /*
    21     * 每一轮的比较确定一个值,整个比较过程需要比较的次数是 长度-1,以为最后一轮的值,只有一个了,没有比较在比较了
    22     * */
    23 
    24     /*
    25     * 统计循环的总次数
    26     * */
    27     var n = 0;
    28 
    29     console.time('a');
    30     for ( var j=0; j<arr.length-1; j++ ) {
    31 
    32         for (var i=0; i<arr.length-1; i++) {
    33             var a = arr[i];
    34             var b = arr[i+1];
    35             if (a < b) {
    36                 arr[i] = b;
    37                 arr[i+1] = a;
    38             }
    39 
    40             n++;
    41         }
    42 
    43     }
    44     console.timeEnd('a');
    45 
    46     console.log(n);
    47     console.log(arr);
    48 
    49 </script>
    50 </body>
    51 </html>
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6 </head>
     7 
     8 <body>
     9 <script>
    10     //var arr = [3,2,4,1,5];
    11 
    12     var arr = [];
    13     for (var i=0; i<30000; i++) {
    14         arr.push(i);
    15     }
    16     arr.sort(function () {
    17         return Math.random() - 0.5;
    18     });
    19 
    20     var n = 0;
    21 
    22     console.time('a');
    23     for ( var j=0; j<arr.length-1; j++ ) {
    24 
    25         /*
    26         * 随着大的循环的次数的增加,对应的小的循环就应该减少,减少j次
    27         * */
    28         for (var i=0; i<arr.length-1-j; i++) {
    29             var a = arr[i];
    30             var b = arr[i+1];
    31             if (a < b) {
    32                 arr[i] = b;
    33                 arr[i+1] = a;
    34             }
    35 
    36             n++;
    37 
    38         }
    39 
    40     }
    41     console.timeEnd('a');
    42 
    43     console.log(n);
    44     console.log(arr);
    45 
    46 </script>
    47 </body>
    48 </html>

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

    <body>
    <script>
    // var arr = [3,2,4,1,5];
    // var arr = [5,4,3,1,2];

    var arr = [];
    for (var i=0; i<30000; i++) {
    arr.unshift(i);
    }
    arr[29999] = 1;
    arr[29998] = 0;

    // arr.sort(function () {
    // return Math.random() - 0.5;
    // });

    var n = 0;

    console.time('a');
    for ( var j=0; j<arr.length-1; j++ ) {

    /*
    * 随着大的循环的次数的增加,对应的小的循环就应该减少,减少j次
    * */

    /*
    * 每次比较小的循环的时候,设置flag为真,表示已经排序好了,假设排序是ok的
    * */
    var flag = true;

    for (var i=0; i<arr.length-1-j; i++) {
    var a = arr[i];
    var b = arr[i+1];
    if (a < b) {
    /*
    * 如果比较过程中走了if条件,那么就说明比较未完成,还需要下次再比较,否则就是交换位置没有发生过,表示数据已经排序好了
    * */

    /*
    * 只要走了if,表示有交换,就把flag设置false
    * */
    flag = false;
    arr[i] = b;
    arr[i+1] = a;
    }

    n++;

    }

    /*
    * 循环完成以后,看下flag的值,如果还保持true,则说明上面循环是没有交换的情况发生的,表示排序ok了,如果为false就表示有过交换
    * */
    if (flag) {
    break;
    }

    }
    console.timeEnd('a');

    console.log(n);
    console.log(arr);

    </script>
    </body>
    </html>

  • 相关阅读:
    [solr]
    [solr]
    [Linux] CentOS 加入开机启动
    [Linux] VirtualBox
    [Eclipse]
    [JBoss]
    [solr]
    [solr]
    [solr]
    [solr]
  • 原文地址:https://www.cnblogs.com/catEatBird/p/6954108.html
Copyright © 2011-2022 走看看