首页 > web前端 > js教程 > 正文

如何实现冒泡排序

巴扎黑
发布: 2017-06-26 15:15:41
原创
1379人浏览过
 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条件,那么就说明比较未完成,还需要下次再比较,否则就是交换位置没有发生过,表示数据已经排序好了
                * */

简篇AI排版
简篇AI排版

AI排版工具,上传图文素材,秒出专业效果!

简篇AI排版 554
查看详情 简篇AI排版

/*
               * 只要走了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>

以上就是如何实现冒泡排序的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号