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 }