1. 程式人生 > >js三種基礎數組排序算法整理

js三種基礎數組排序算法整理

arr strong 一個 for 前端 分治 .proto 來看 sort

   數組排序,大概是每個程序員必須掌握的基本算法 ,作為一個剛入門的前端小卒,再被各種面試各種排序折磨過後 ,看過很多別人寫的 算法 ,但看總歸是理解的不是那麽深刻 ,便想著自己整理一下這最基本的三個排序算法 ,希望對還在學習的你有些許幫助 。比較基本的三種算法 。冒泡、插入 、快速 。

   首先來看冒泡排序法 ,基本原理其實就是對數組進行兩層循環,外層循環控制次數,數組中有多少個成員,便是要進行多少次內層遍歷,不斷地將當前成員和下一成員進行對比 ,其實在群眾偶其中有很多次是重復對比的 ,先看這樣一個寫法 :


Array.prototype.bubbleSort=function (){
for
(var i=0;i<this.length;i++){
  for(var j=0;j<this.length-1;j++){
  if(this[j]>this[j+1]){
var temp=this[j];
       this[j]=this[j+1];
       this[j+1]=temp;
    }
  }
 }     return this;
}  

這個無疑是最最基本 的寫法了 ,但實際上這個還可以稍做一下優化 ,節省其時間復雜度 ,看代碼如下 :

Array.prototype.bubbleSort=function (){
for(var i=0;i<this.length;i++){
  for(var j=0;j<this.length-i-1
;j++){
  if(this[j]>this[j+1]){
       var temp=this[j];
       this[j]=this[j+1];
       this[j+1]=temp;
    }
  }
 }      
 return this;
}  

再者 來看插入排序 ,顧名思義 ,是將數組每一個成員 ,一一插入到正確的位置,假設第一個成員【0】已經完成排序 ,然後從【1】開始遍歷數組 ,每外層遍歷一次 內層循環便跟之前已排序好的每個成員進行比較 ,若arr【j-1】>arr【j】,則交換位置,以此類推,直到退出循環,將其插入到正確的位置;代碼如下 :

Array.prototype.insertSort=function (){
    var prevIndex,current;
     for(var i=1;i<this.length;i++)  {
        prevIndex=i-1;
        current=this[i];
        while(prevIndex>=0&&this[prevIndex]>current){
               this[prevIndex+1]=this[prevIndex];
               prevIndex--;
         }
       this[prevIndex+1]=current;
     }
    return this;
}
var arr=[12,3,23,45,32];
arr.insertSort();

最後我們來看一下比較有實用價值的快速排序法 ;快速排序法原理是將數組不斷地進行分治,聲明兩個數組 left和right,然後選擇數組中間一個成員作為 基準base ,將比其大的push進right數組 ,比其小的push進左邊數組 ,接著遞歸接著對left和right數組進行繼續分組排序 ,每分一次組便對left、base、right進行concat,以此類推 ,直到排序完成,代碼如下:

Array.prototype.quickSort=function(){
    if(this.length<=1){return this};
    var baseIndex=Math.floor(this.length/2);
    var base=this.splice(baseIndex,1)[0];
    var left=[],right=[];
    for(var i=0;i<this.length;i++){
        if(this[i]<base){
            left.push(this[i]);
        }else{
            right.push(this[i]);
        }
    }
    return  left.quickSort().concat([base],right.quickSort());
}    
var a=[12,2,34,32,16];
a.quickSort();

js三種基礎數組排序算法整理