快速排序

/**
* 快速排序
* @method quickSort
* @for
* @param @param {Array} {数组}
* @return {Array} 排序结果
*/
const quickSort = (arr) => {
if (!arr) return "数组为空"
if (arr.length <= 1) return arr
let midIndex = Math.floor(arr.length / 2)
let midNum = arr.splice(midIndex, 1)[0];
let left = []
let right = []
for (let i = 0; i < arr.length; i++) {
if (arr[i] <= midNum) {
left.push(arr[i])
} else {
right.push(arr[i])
}
}
return quickSort(left).concat([midNum], quickSort(right))
}
let qsort = fn => ([x, ...xn]) => x == null ? []
: [
...qsort(fn)(xn.filter(a => fn(a, x))),
x,
...qsort(fn)(xn.filter(a => !fn(a, x)))
]