js實現快速排序的方法


因為面試面到了這個問題,所以寫一下,加深印象,有兩種方法

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

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

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])
輸出結果

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

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));
};
使用的時候,直接調用quickSort()就行了。

  

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

 

要是還有其他方法的話,求告知,謝謝!

 


免責聲明!

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



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