js實現快速排序的方法


第一種是通過兩個for循環,每一次對比相鄰兩個數據的大小,小的排在前面,如果前面的數據比后面的大就交換這兩個數的位置,這個方法就是比較次數太多了,效率比價低。

我只是傳入了一個10位數的數組,如果是上萬或者更大的數據,不知道您的電腦會不會藍屏了,嘿嘿,你可以試試哦!

1
2
3
4
5
6
7
8
9
10
11
12
13
var  Sort= function (arr){ 
     for ( var  i=0;i<arr.length-1;i++){ 
         for ( var  j=i+1;j<arr.length;j++){ 
             if (arr[i]>arr[j]){ /*如果前面的數據比后面的大就交換位置*/
                 var  list=arr[i]; 
                 arr[i]=arr[j]; 
                 arr[j]=list; 
             }  
        
     }  
     return  arr; 
Sort([10,10,1,2,4,6,7,89,7,4])<br>輸出結果

 下面我們來說說第二種方法,這方法是我瀏覽阮一峰老師日志看到的,這種方法的效率會高很多,具體選哪種,看情況吧!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var  quickSort =  function (arr) {
   if  (arr.length <= 1) { //如果數組長度小於等於1無需判斷直接返回即可 
         return  arr;
     }
   var  pivotIndex = Math.floor(arr.length / 2); //取基准點 
   var  pivot = arr.splice(pivotIndex, 1)[0]; //取基准點的值,splice(index,1)函數可以返回數組中被刪除的那個數
   var  left = []; //存放比基准點小的數組
   var  right = []; //存放比基准點大的數組 
   for  ( var  i = 0; i < arr.length; i++){  //遍歷數組,進行判斷分配 
     if  (arr[i] < pivot) {
      left.push(arr[i]); //比基准點小的放在左邊數組 
    }  else  {
      right.push(arr[i]); //比基准點大的放在右邊數組 
    }
  }
          //遞歸執行以上操作,對左右兩個數組進行操作,直到數組長度為<=1; 
   return  quickSort(left).concat([pivot], quickSort(right));
};<br>使用的時候,直接調用quickSort()就行了。

  

要是這些注釋你看了還不理解的話,那么,可以去看看阮一峰老師的日志,鏈接http://www.ruanyifeng.com/blog/2011/04/quicksort_in_javascript.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM