1 // 快速排序 2 function quickSelect(arr) { 3 // 遞歸出口,當數組長度為1時,return 4 if(arr.length <= 1) return arr 5 // 截取中間位置的numValue值,如果長度不為偶數,向下取整 6 var num = Math.floor(arr.length/2) 7 // splice方法刪除數組中一個值,並且返回刪除的值 8 var numValue = arr.splice(num, 1) 9 // 聲明兩個數組,存放numValue值的兩端 10 var left = [] 11 var right = [] 12 // 過濾比numValue小的值,返回一個數組,存放到left數組中 13 left = arr.filter(item => item < numValue) 14 // 過濾比numValue大的值,返回一個數組,存放到right數組中 15 right = arr.filter(item => item >= numValue) 16 // 第一層執行完畢,返回遞歸結果,用concat鏈接數組 17 return quickSelect(left).concat(numValue, quickSelect(right)) 18 }