//不使用splice函数切割数组
function fast(arr) {
if (arr.length <= 1) {
return arr;
}
//分到最后 会出现长度为0 和长度为1 的数组 也就是终止条件
//var middle = arr.splice(arr.length/2,1); 这是切除
var middle = arr[parseInt(arr.length / 2)]; //这是跳过
//跳过中间值
//console.log(middle);
var left = [];
var right = [];
for (let i = 0; i < arr.length; i++) {
if (i != parseInt(arr.length / 2)) {
if (arr[i] < middle) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
}
// arr.splice(arr.length/2,0,middle[0]);
return fast(left).concat(middle, fast(right))
}
//使用splice数组切割数组,但是需要复原
function fast(list) {
if (list.length <= 1) {
return list;
}
var middle = list.splice(list.length / 2, 1);
var leftList = [];
var rightList = [];
for (var i = 0; i < list.length; i++) {
var item = list[i];
if (item <= middle[0]) {
leftList.push(item);
} else {
rightList.push(item);
}
}
list.splice(list.length / 2, 0, 1);
return fast(leftList).concat(middle, fast(rightList));
}