Javascript 可以在快速排序中使用slice()吗?
我正在学习快速排序,下面是代码:Javascript 可以在快速排序中使用slice()吗?,javascript,slice,quicksort,Javascript,Slice,Quicksort,我正在学习快速排序,下面是代码: const pivot1 = (arr, low = 0, high = arr.length -1) => { let pivot = arr[low]; let index = low; for(let i = low + 1; i <= high; i++){ if(pivot > arr[i]){ index++; [arr[index], arr
const pivot1 = (arr, low = 0, high = arr.length -1) => {
let pivot = arr[low];
let index = low;
for(let i = low + 1; i <= high; i++){
if(pivot > arr[i]){
index++;
[arr[index], arr[i]] = [arr[i], arr[index]];
}
}
[arr[low], arr[index]] = [arr[index], arr[low]];
return index;
}
const quickSort1 = (arr, low = 0, high = arr.length - 1) => {
if(low < high){
let pivot = pivot1(arr, low, high);
quickSort1(arr, low, pivot - 1);
quickSort1(arr, pivot + 1, high);
}
return arr;
}
console.log(quickSort1([5,2,1,8,4,7,6,3])); // [1,2,3,4,5,6,7,8]
您不应该使用slice,因为它不会改变下面的数组。您可以传递左索引和右索引,也可以保存两个递归快速排序的结果并合并数组
const left_array = quickSort2(left);
const right_array = quickSort2(right);
arr = [...left_array, ...right_array];
另外,右边的切片将使用pivot作为参数,而不是pivot+1,因为切片不包含结束索引
const left_array = quickSort2(left);
const right_array = quickSort2(right);
arr = [...left_array, ...right_array];