天下英雄出我辈,一入江湖岁月催。鸿图霸业谈笑间,不胜人生一场醉。
武当山上,一年一度的试道大会又开始了...
众武当弟子摩拳擦掌都想在此次试道大会上一展风采...
张三丰临终前曾留下一句话:试道大会采用冒泡排序....
冒泡思想:每冒泡一轮(外层for循环控制),选出这一轮中最大的数(内层for循环依次两两比较逐步移到最后...)
一共进行arr.length-1轮 (2个比一轮、3个比两轮、悟不出来自己收拾行李快快下山吧,我武当派没有你这样的弟子!)
每轮比较arr.length-1次?(因为每一轮冒泡得到的最大值已经得道成仙无需再比 所以每轮比较arr.length-1-i次)

灵魂版1(实力对决之一个都不能少)

由两位德高望重的裁判主持
主裁判(外层for循环)负责轮数,副裁判(内层for循环)在主裁判的指导下负责每一场比武...
    bubbleSortSoul1 = (arr = []) => {let count = 0;// i为轮数(因i从0开始 即i<arr.length-1)for (let i = 0; i < arr.length - 1; i++) {count++;// 第i轮仅需比较length-1-i次for (let j = 0; j < arr.length - 1 - i; j++) {// 这里能不能写成arr[j-1]>arr[j]? 如果有这种特殊癖好 那么j就从1开始吧,然后j<arr.length-iif (arr[j] > arr[j + 1]) {let temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}console.log(`bubbleSortSoul1排序完成用了${count}轮`);return arr;}

灵魂版2(实力对决之换汤不换药)

副裁判突发奇想,竟悟出--心法,每轮比武不再需要主裁判详细指导(不用-i)
    bubbleSortSoul2 = (arr = []) => {let length = arr.length - 1;let count = 0;for (let i = 0; i < arr.length - 1; i++) {count++;// 这里的length第一轮==arr.length-1-0跟上一版一样for (let j = 0; j < length; j++) {if (arr[j] > arr[j + 1]) {let temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}// 每一次内层for循环比较完成-1 跟前面的-i一样 换汤不换药length--;}console.log(`bubbleSortSoul2排序完成用了${count}轮`);return arr;}

灵魂版3(实力对决之副裁判独担重任)

主裁判临时有事请假,大会当头,副裁判迫于压力终悟出冒泡心经,大会依然有序进行...
    bubbleSortSoul3 = (arr = []) => {let length = arr.length - 1;let count = 0;// 单层for循环for (let j = 0; j < length; j++) {if (arr[j] > arr[j + 1]) {let temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}// 在循环到最大值时候重置j(j=-1到上面j++重置为0)这样可以省了外层for循环// 某弟子问:兄dei 这样也行?靠谱不?师傅知道你在瞎搞不?// 副裁判:好好比武别废话!冒泡心经!汝辈岂知?if (j == length - 1) {j = -1;length--;count++;}}console.log(`bubbleSortSoul3排序完成用了${count}轮`);return arr;}

没有灵魂版1(flag心法?比武可能提前结束)

师父得知副裁判在主裁判不在的情况下成功举行了一场大会,颇为高兴,决定传一套flag心法给副裁判
此次大会由主裁判弟弟while担任,弟弟毕竟是弟弟,知道的太少了,只能听从安排
副裁判对弟弟说:这样吧,等会比武我微信给你发true你就喊开始,发false你就喊结束,are you OK? 弟弟表示很OK
内幕:部分弟子比武期间被安排得明明白白?比武提前结束...
    bubbleSortNoSoul1 = (arr = []) => {let [length, flag, count] = [arr.length - 1, true, 0];// 这里用while执行轮数 (也可以用for)while (flag) {count++;// flag心法第一章:他强由他强 清风拂山岗 他横由他横 明月照大江// 副裁判准备马上微信给弟弟发false想要结束比武 刚打好没发出去 下面的弟子开始躁动了 干哈呢 比不比了??// 好在副裁判有慧根 立即悟出原理(此次比完没有交换就结束吧 再比也没有意义了!)师父果然是师父!佩服!flag = false;// 大家安静 还是老规矩 继续...for (let j = 0; j < length; j++) {if (arr[j] > arr[j + 1]) {let temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;// 如果此次循环有交换 则说明还得再来一轮,继续往下比...这轮结束就发true给弟弟flag = true;}}length--;}console.log(`bubbleSortNoSoul1排序完成用了${count}轮`);return arr;}

没有灵魂版2(左右互博之术?副裁判得到周伯通真传)

while弟弟被逼做数学题,比大小
副裁判备受周伯通喜欢,习得左右互博之术,并将之发扬光大...
    bubbleSortNoSoul2 = (arr = []) => {let [j, temp, left, right, count] = [0, 0, 0, arr.length - 1, 0];while (left < right) {count++;for (j = left; j < right; j++) {if (arr[j] > arr[j + 1]) {temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}right--;for (j = right; j > left; j--) {if (arr[j - 1] > arr[j]) {temp = arr[j];arr[j] = arr[j - 1];arr[j - 1] = temp;}}left++;}console.log(`bubbleSortNoSoul2排序完成用了${count}轮`);return arr;}

没有灵魂版3(flag心法+左右互博)

这场比武让副裁判终成一代大侠...
    bubbleSortNoSoul3 = (arr = []) => {let [j, temp, left, right, flag, count] = [0, 0, 0, arr.length - 1, true, 0];while (left < right && flag) {count++;flag = false;for (j = left; j < right; j++) {if (arr[j] > arr[j + 1]) {temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;flag = true;}}right--;for (j = right; j > left; j--) {if (arr[j - 1] > arr[j]) {temp = arr[j];arr[j] = arr[j - 1];arr[j - 1] = temp;flag = true;}}left++;}console.log(`bubbleSortNoSoul3排序完成用了${count}轮`);return arr;}

测试结果:

    let arr1 = [1, 2, 7, 8, 4, 5, 6, 3, 9];console.time('1');console.log(bubbleSortSoul1(arr1.concat()));  //8轮console.timeEnd('1');console.time('2');console.log(bubbleSortSoul2(arr1.concat()));  //8轮console.timeEnd('2');console.time('3');console.log(bubbleSortSoul3(arr1.concat()));  //8轮console.timeEnd('3');console.time('4');console.log(bubbleSortNoSoul1(arr1.concat()));//6轮console.timeEnd('4');console.time('5');console.log(bubbleSortNoSoul2(arr1.concat()));//4轮console.timeEnd('5');console.time('6');console.log(bubbleSortNoSoul3(arr1.concat()));//3轮console.timeEnd('6');

node环境下测试结果

注:

  • 汝辈岂知。——《三国演义》孔明空城计,司马懿两个儿子要攻城,司马懿:汝辈岂知?宜速退。
  • 他强由他强 清风拂山岗 他横由他横 明月照大江。——出自金庸《倚天屠龙记》里九阳真经。
  • 周伯通。——金庸《射雕英雄传》人物,曾将空明拳和双手互博之术传给郭靖。

转载于:https://www.cnblogs.com/rebirth-csz/p/10530477.html

JS冒泡排序的6种写法(武当雄风)相关推荐

  1. 冒泡排序及其三种写法

    冒泡排序 冒泡排序是入门级的算法,但也有一些有趣的玩法. 通常来说,冒泡排序有三种写法: 一边比较一边向后两两交换,将最大值/最小值冒泡到最后一位: 经过优化的写法:使用一个变量记录当前轮次的比较是否 ...

  2. 冒泡排序BubbleSort(两种写法)

    冒泡排序的核心理念是什么?那就是相邻两数比较,前面的数比后面的数小的话,就交换位置,每次循环找到该次排序的最小值,然后放到该次循环数组的队尾,因此便利到最后,留的就是最大的数. 那么在这里说下冒泡排序 ...

  3. js面向对象的五种写法

    //定义Circle类,拥有成员变量r,常量PI和计算面积的成员函数area() Java代码   //第1种写法 function Circle(r) { this.r = r; } Circle. ...

  4. java 冒泡排序的三种写法_冒泡排序的三种实现(Java)

    冒泡排序是非常好理解的,以从小到大排序为例,每一轮排序就找出未排序序列中最大值放在最后. 设数组的长度为N: (1)比较前后相邻的二个数据,如果前面数据大于后面的数据,就将这二个数据交换. (2)这样 ...

  5. JS面向对象的三种写法

    欢迎来我的博客交流 /*面向对象的三种写法 *1.构造函数 *2.class类 * 2.直接操作对象 * */ /**/function myShow(name){this.name = name;t ...

  6. js冒泡排序的四种方法

    更新个基础知识比较简单 仅供参考 //参考排序的数组var arr = [3, 2, 5, 1, 4] 第一种 这种方法冒泡排序 比较相邻的两个元素,如果前一个比后一个大,则交换位置. 第一轮把最大的 ...

  7. JS 定时器的4种写法及介绍

    JS提供了一些原生方法来实现延时去执行某一段代码,下面来简单介绍一下setTiemout.setInterval.setImmediate.requestAnimationFrame. 一.什么是定时 ...

  8. JS 定时器的2种写法及介绍

     一:两种定时器 setTimeout() 延迟定时器 setInterval() 循环定时器('间隔器') 定时器中的函数挂载在window对象上,内部的this指向window setTimeou ...

  9. 基于JS实现回到页面顶部的五种写法(从实现到增强)

    为什么80%的码农都做不了架构师?>>>    写法 [1]锚点 使用锚点链接是一种简单的返回顶部的功能实现.该实现主要在页面顶部放置一个指定名称的锚点链接,然后在页面下方放置一个返 ...

最新文章

  1. Rocksdb 的一些参数调优策略
  2. 【OpenCV 4开发详解】图像与视频的保存
  3. ABAP程序打印Spool Request到PDF
  4. 肖战被抵制?Python爬虫揭秘关于肖战粉丝的人群画像
  5. C#——银行ATM程序DEMO
  6. C++ Opengl 多重纹理源码
  7. orion算法被解密了
  8. 读取文件慢_页面缓存(Page Cache)-内存和文件之间的那点事儿(下)
  9. 前端_网页编程 Form表单与模板引擎(上)
  10. Windows系统(cmd)常用命令
  11. 4.Unix工作环境
  12. ios block常见的错误(二)——循环引用
  13. 基于MRG_MyISAM引擎的Mysql分表
  14. 聚类分析一:K-MEANS算法
  15. caffe---测试模型分类结果并输出(python )
  16. 农行笔试编程题(Java)记录
  17. 在WINDOWS XP环境下部署基于网络的开源入侵监测平台——snort
  18. 用R语言下载任意地区DEM数据
  19. 关于ps cs6的滤镜 (抽出)
  20. 为什么手机显示itunes store无法连接服务器,iPad无法连接到iTunes Store怎么办?教你几招...

热门文章

  1. 音频信号处理(二)语音信号采集处理与基音周期
  2. 结构struct嵌套
  3. Mysql 面试题总结
  4. NFS服务器的启动与停止
  5. JAVA根据经纬度计算两点距离
  6. 基于STM32的常用数码管芯片TM1637驱动
  7. SPC 统计过程控制
  8. AXURE教程:散点图
  9. 计算机毕业设计PHP高校体育场馆管理系统(源码+程序+VUE+lw+部署)
  10. 安卓软件全家桶分析,哪些软件是一伙的