因為面試面到了這個問題,所以寫一下,加深印象,有兩種方法
第一種是通過兩個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
要是還有其他方法的話,求告知,謝謝!