国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

分享javascript實現的冒泡排序代碼并優化

2024-05-06 16:31:25
字體:
來源:轉載
供稿:網友
本文給大家匯總介紹了幾個個人收藏的JavaScript實現冒泡排序的代碼,都是非常的不錯,有需要的小伙伴可以參考下
 

冒泡排序:就是將一個數組中的元素按照從大到小或者從小到大的順序進行排列。

var array=[9,8,7,6,5,4,3,2,1];

第一輪比較:8,7,6,5,4,3,2,1,9      交換了8次        i=0   j=array.length-1-i

第二輪比較:7,6,5,4,3,2,1,8,9      交換了7次        i=1   j=array.length-1-i

第三輪比較:6,5,4,3,2,1,7,8,9      交換了6次        i=2   j=array.length-1-i

第四輪比較:5,4,3,2,1,6,7,8,9      交換了5次        i=3   j=array.length-1-i

第五輪比較:4,3,2,1,5,6,7,8,9      交換了4次        i=4   j=array.length-1-i

第六輪比較:3,2,1,4,5,6,7,8,9      交換了3次        i=5   j=array.length-1-i

第七輪比較:2,1,3,4,5,6,7,8,9      交換了2次        i=6   j=array.length-1-i

第八輪比較:1,2,3,4,5,6,7,8,9      交換了1次        i=7   j=array.length-1-i

代碼實現:

var temp;var array=[9,8,7,6,5,4,3,2,1];//外循環控制輪數for(var i=0;i<array.length-1;i++){//內循環控制比較次數  for(var j=0;j<array.length-1-i;j++){    if(array[j]>array[j+1]){      //交換兩個變量      temp=array[j];      array[j]=array[j+1];      array[j+1]=temp;    }  }}console.log(array);

代碼優化:

var temp,bool,m=0;var array=[9,8,7,6,5,4,3,2,1];for(var i=0;i<array.length-1;i++){  //開閉原則中的開關  bool = true;  for(var j=0;j<array.length-1-i;j++){    if(array[j]>array[j+1]){      //交換兩個變量      temp=array[j];      array[j]=array[j+1];      array[j+1]=temp;      bool=false;//將開關關閉    }  }  //如果內循環中的if沒有被執行(開關關閉,執行下面的語句);  if(bool){    break;  }  m++;}console.log(array+",比較"+m+"輪");

備注:比較輪數最好情況為0輪,最壞為8輪

我們再來看個冒泡排序的算法

//javascript冒泡排序,直接添加到基礎類型的原型上  //這里用一個javascript語言精粹上的 代碼,為基礎類型原型添加方法,  // 因為Array,String他們自身也是構造函數,他們創建對象也是通過new 構造函數行的,因此Array.prototype,String.prototype都指向了Function.prototype  // Array.method的時候,先訪問Array自身函數對象沒有method方法,接著Array.prototype仍沒有,接著Function.prototype找到了  Function.prototype.method = function (name, func) {    if(!this.prototype[name]){       //最好先判斷一下是原型中否有這個方法,如果沒有再添加      this.prototype[name] = func;    }    return this;  };    Array.method('bubble',function(){    // 冒泡算法 總共循環數組的長度次,即len次,每次將最小的放最后        var len = this.length;    var i = 0,       j = 0,       tmp =0;        for (i=0 ; i < len; i++) {      for ( j = 0; (j +1) < len-i; j++) {        console.log()        if ( this[j] > this[j+1] ){          tmp = this[j];          this[j] = this[j+1];          this[j+1] = tmp;        }      };    };    return this;  });  alert([21,32,1,31,22,45,68,37,].bubble());

看了另一個前端工程師,西風瘦馬的代碼,在第一層for循環加入初始化一個exchange交換標志為false,當有交換發生時,則變為true,在第二層for循環結束后加入一個判斷,如果為false,即從前往后對比沒有交換,證明已經大小順序正確,即可break來跳出外層for循環。

//需要排序的數組var list = Array(23, 45, 18, 37, 92, 13, 24);//數組長度var n = list.length;//交換順序的臨時變量var tmp;////交換標志var exchange;//最多做n-1趟排序for (var time = 0; time <n - 1; time ++) {  exchange = false;  for (var i = n - 1; i> time; i–-) {    if (list[i] <list[i - 1]) {      exchange = true;      tmp = list[i - 1];      list[i - 1] = list[i];      list[i] = tmp;    }  }  //若本趟排序未發生交換,提前終止算法  if (!exchange) {    break;  }}alert(‘數組排序后為:' + list + ‘,n共排了' + time + ‘趟');

之前還收藏過一個網友的算法,也相當不錯,大家看下

function BubbleSort(array) {   var length = array.length;   var temp;  var isSort=false;   for(var i = 1; i < length; i++) {    isSort = false;      for(var j = 0; j < length - i; j++) {     if(array[j] > array[j+1]) {      //交換      temp = array[j];      array[j] = array[j+1];      array[j+1] = temp;          isSort = true;     }    }    if(!isSort) break; //如果沒有發生交換,則退出循環    }  }  var array =[10,-3,5,34,-34,5,0,9];   BubbleSort(array);    for(var i=0;i< array.length;i++) {     document.write(array[i]+ " ");    } 

好了,今天就先給大家總結這些吧,希望對小伙伴們學習JavaScript冒泡排序能夠有所幫助



注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 瑞丽市| 京山县| 德江县| 德保县| 盘山县| 定远县| 图片| 逊克县| 梨树县| 夹江县| 子长县| 遵化市| 连云港市| 海晏县| 育儿| 合水县| 潞城市| 老河口市| 呼和浩特市| 永平县| 阿图什市| 密山市| 郯城县| 卢氏县| 驻马店市| 新和县| 塔城市| 景宁| 聂荣县| 民丰县| 雷州市| 开封县| 泰来县| 礼泉县| 民县| 邛崃市| 沾益县| 阿克| 元氏县| 贡觉县| 鹤峰县|