快速排序的实现思路
- 算出数组的长度的一半,取出这个中间值,和这个中间值所对的索引值
- 遍历整个数组,把大于中间值的这一项放在一个数组,小于中间值的放在另外一个数组
- 把大于中间值的数组和小于中间值的数组分别再次做递归
具体代码实现
function quickSort(arr) {
if (arr.length <= 1) { return arr } // 每次递归进来先看判断
var index = Math.floor(arr.length / 2) // 找到中间索引值,并向下取整
var midValue = arr.splice(index, 1)[0] // 用改变原数组的方法取到 这个中间值
let left = [], right = []
arr.forEach(item => { // 遍历数组,小于中间值的放在left数组,反之放在right数组
if (item < midValue) {
left.push(item)
} else {
right.push(item)
}
})
return quickSort(left).concat([midValue], quickSort(right))
// 用递归,再次循环left和 right,直到arr.length条件 <= 1,跳出,计算结果
}