欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

分享javascript實(shí)現(xiàn)的冒泡排序代碼并優(yōu)化

 更新時(shí)間:2016年06月05日 08:46:31   投稿:hebedich  
本文給大家匯總介紹了幾個(gè)個(gè)人收藏的JavaScript實(shí)現(xiàn)冒泡排序的代碼,都是非常的不錯(cuò),有需要的小伙伴可以參考下

冒泡排序:就是將一個(gè)數(shù)組中的元素按照從大到小或者從小到大的順序進(jìn)行排列。

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

代碼實(shí)現(xiàn):

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

代碼優(yōu)化:

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++){
  //開閉原則中的開關(guān)
  bool = true;
  for(var j=0;j<array.length-1-i;j++){
    if(array[j]>array[j+1]){
      //交換兩個(gè)變量
      temp=array[j];
      array[j]=array[j+1];
      array[j+1]=temp;
      bool=false;//將開關(guān)關(guān)閉
    }
  }
  //如果內(nèi)循環(huán)中的if沒有被執(zhí)行(開關(guān)關(guān)閉,執(zhí)行下面的語句);
  if(bool){
    break;
  }
  m++;
}
console.log(array+",比較"+m+"輪");

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

我們?cè)賮砜磦€(gè)冒泡排序的算法

//javascript冒泡排序,直接添加到基礎(chǔ)類型的原型上
  //這里用一個(gè)javascript語言精粹上的 代碼,為基礎(chǔ)類型原型添加方法,
  // 因?yàn)锳rray,String他們自身也是構(gòu)造函數(shù),他們創(chuàng)建對(duì)象也是通過new 構(gòu)造函數(shù)行的,因此Array.prototype,String.prototype都指向了Function.prototype
  // Array.method的時(shí)候,先訪問Array自身函數(shù)對(duì)象沒有method方法,接著Array.prototype仍沒有,接著Function.prototype找到了
  Function.prototype.method = function (name, func) {
    if(!this.prototype[name]){ 
      //最好先判斷一下是原型中否有這個(gè)方法,如果沒有再添加
      this.prototype[name] = func;
    }
    return this;
  };
  

  Array.method('bubble',function(){
    // 冒泡算法 總共循環(huán)數(shù)組的長度次,即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());

看了另一個(gè)前端工程師,西風(fēng)瘦馬的代碼,在第一層for循環(huán)加入初始化一個(gè)exchange交換標(biāo)志為false,當(dāng)有交換發(fā)生時(shí),則變?yōu)閠rue,在第二層for循環(huán)結(jié)束后加入一個(gè)判斷,如果為false,即從前往后對(duì)比沒有交換,證明已經(jīng)大小順序正確,即可break來跳出外層for循環(huán)。

//需要排序的數(shù)組
var list = Array(23, 45, 18, 37, 92, 13, 24);
//數(shù)組長度
var n = list.length;
//交換順序的臨時(shí)變量
var tmp;//
//交換標(biāo)志
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;
    }
  }
  //若本趟排序未發(fā)生交換,提前終止算法
  if (!exchange) {
    break;
  }
}
alert(‘?dāng)?shù)組排序后為:' + list + ‘,n共排了' + time + ‘趟');

之前還收藏過一個(gè)網(wǎng)友的算法,也相當(dāng)不錯(cuò),大家看下

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; //如果沒有發(fā)生交換,則退出循環(huán)  
  }  
}
  var array =[10,-3,5,34,-34,5,0,9]; 
  BubbleSort(array);  
  for(var i=0;i< array.length;i++) {  
   document.write(array[i]+ " ");  
  } 

好了,今天就先給大家總結(jié)這些吧,希望對(duì)小伙伴們學(xué)習(xí)JavaScript冒泡排序能夠有所幫助

相關(guān)文章

最新評(píng)論