function quickSort(arr) {
if (arr.length <= 1) return arr
// 数组中间值下标:
var index = Math.floor(arr.length / 2)
// 得到中间值,并把它从数组中取出
var intermediateValue = arr.splice(index, 1)[0]
// 比较,比它小的方左边,大的或相等的放右边
var left = []
var right = []
for (let i = 0; i < arr.length; i++) {
arr[i] > intermediateValue ? right.push(arr[i]) : left.push(arr[i])
}
// 递归调用:
return quickSort(left).concat([intermediateValue], quickSort(right))
}
var numArr = [1, 8, 6, 3, 55, 22, 17, 15, 2, 3]
console.log(quickSort(numArr)) // 输出: (10) [1, 2, 3, 3, 6, 8, 15, 17, 22, 55]
参考:阮一峰快排
function divice(arr) {
if (arr.length === 1) return arr
var mid = Math.floor(arr.length / 2)
var left = arr.slice(0, mid)
var right = arr.slice(mid)
// 递归拆分
return merge(divice(left), divice(right))
}
// 组合
function merge(left, right) {
var temp = []
while (left.length > 0 && right.length > 0) {
left[0] < right[0] ? temp.push(left.shift()) : temp.push(right.shift())
}
return temp.concat(left, right)
}
var numArr = [1, 8, 6, 3, 55, 22, 17, 15, 2, 3]
console.log(divice(numArr)) // 输出: (10) [1, 2, 3, 3, 6, 8, 15, 17, 22, 55]