Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 可以在快速排序中使用slice()吗?_Javascript_Slice_Quicksort - Fatal编程技术网

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];