function quickSort(arr){
//找到最後一層的傳回條件
if(arr.length <= 1){
return arr;
}
//截取數組中間位置的值
var center = arr.splice( parseInt(arr.length / 2), 1)[0];
//定義小于和大于中間位置值的數組
var left = [], right = [];
//周遊截取後的數組并将小于和大于center的值分别放到left和right中
for(var i = 0; i < arr.length; i++){
if(arr[i] <= center){
left.push(arr[i]);
}
else{
right.push(arr[i]);
}
}
// 使用遞歸對于left和right繼續進行排序
// 對于倒數第二次遞歸來說,left和right數組中可能隻有0-1個值,
// 倒數第一次進入這個函數的時候,就會被判斷為length<=1,到達遞歸終點
// 這時候向上歸,對于傳回的數組進行concat合并,
// 注意:concat傳回值是一個新數組,不是對原數組操作
return quickSort(left).concat(center, quickSort(right));
}
console.log(quickSort(arr));