快速排序
体育课,一排人,定基准,分高低,再分组
思路:在一排人中找一个人,然后所有人和他比一次,比他高的站右边,否则站左边,分为两组
然后用同样的思路,继续对左右两边的分组再次进行对比(递归),全部排好后,再排在一起即可
`
let arr = [10, 1, 8, 5, 17, 12]
function quickSort(arr) {
//如果数组小于1,则返回数组,用于递归到最后的返回
if (arr.length < 1) {
return arr
}
//找一个人,第一个
let flag = arr[0]
//比这个人高的一组
let big = []
//比这个人矮的一组
let small = []
// 不是和自己比,所以要从1开始
for (let i = 1; i < arr.length; i++) {
if (arr[i] > flag) {
big.push(arr[i])
} else {
small.push(arr[i])
}
}
//递归再次排序,然后拼接在一起
return [...quickSort(left), flag, ...quickSort(right)]
// return quickSort(left)
// .concat([flag])
// .concat(quickSort(right))
}
console.log(quickSort(arr)) //[1, 5, 8, 10, 12, 17]
//递归结果,再次对左右两边进行排序
//第一次执行[1,8,5] 10 [17,12]
//第一次递归执行[1,[8,5]] 10 [17,12]
//第二次递归执行[1,[[5],[8]]] 10 [17,12]
//第三次递归执行[1,[[5],[8]]] 10 [[12],17]