熟悉一下什么是递归
// 一个简单的阶乘函数
var f = function (x) {
if (x === 1) {
return 1;
} else {
return x * f(x - 1);
}
}
var b = f(4)
// 执行过程
// 4*f(3) 4*3*f(2) 4*3*2*f(1)
console.log(b)
递归排序也就是:快排
(1)从数列中取出一个数作为参考,分区过程。
(2)将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
(3)对左右区间重复第二步,直到各区间只有一个数。(停止递归的条件)
var arr1 = [4, 8, 9, 5, 78, 0, 99];
function digui(arr) {
if (Array.isArray(arr)) {
if (arr.length <= 1) {
return arr;
}
let minddleindex = Math.floor(arr.length / 2);
//下面这一步很关键
let middle = arr.splice(minddleindex,1);
let left = [];
let right = [];
arr.forEach( item => {
if(item > middle) {
right.push(item);
}else {
left.push(item);
}
});
return digui(left).concat(middle, digui(right));
} else {
return;
}
}
console.log(digui(arr1))
//[0, 4, 5, 8,9, 78, 99]