我试图在JS中编写一个快速排序算法时发生了这个错误.

const x = [10, 9, 20, 3, 2, 4, 50, 69, 11, 5];

function partion(array){
    let pivot = array.length - 1;
    let tem_storage = 0;
    let i = -1;
    for (let j = 0; j <= x.length - 1; j+=1){
        if (array[j] < array[pivot]){
            tem_storage = array[j];
            i += 1;
            array[j] = array[i];
            array[i] = tem_storage;
        }
        else if (array[i] > array[pivot]){
            j += 1;
        }

    }
    i += 1;
    tem_storage = array[i];
    array[i] = array[pivot];
    array[pivot] = tem_storage;
    return i;
}

function quick_sort(array, low, high){
    if(low < high){
        let pi = partion(array);
        quick_sort(array, low, pi - 1);
        quick_sort(array, pi + 1, high);
    }
}

quick_sort(x, 0, x.length);

console.log(x);

quick_sort函数中,quick_sort(array, low, pi - 1);导致错误.

我删除了那一行代码,程序似乎工作了.我对编程和算法比较陌生.我不知道为什么它会导致错误,但有人可以解释.

推荐答案

你遇到了无限递归的问题.

  • 更新分区函数以正确使用低索引和高索引.
  • 更新QUICK_SORT函数以正确传递LOW和HIGH参数.

请把这个判断一下

function partition(array, low, high) {
    let pivot = array[high];
    let i = low - 1;

    for (let j = low; j < high; j++) {
        if (array[j] < pivot) {
            i++;
            [array[i], array[j]] = [array[j], array[i]]; // Swap elements
        }
    }

    [array[i + 1], array[high]] = [array[high], array[i + 1]]; // Swap the pivot
    return i + 1;
}

function quick_sort(array, low, high) {
    if (low < high) {
        let pi = partition(array, low, high);
        quick_sort(array, low, pi - 1);
        quick_sort(array, pi + 1, high);
    }
}

Javascript相关问答推荐

JQuery. show()工作,但. hide()不工作

如何修复我的js构建表每当我添加一个额外的列作为它的第一列?

康威的生活游戏规则在我的Javascript版本中不起作用.''我做错了什么?

切换时排序对象数组,切换不起作用

Chart.js 4.4.2,当悬停在一个数据点上时,如何在工具提示中拥有多个数据点/标签?

无法从NextJS组件传递函数作为参数'

XSLT处理器未运行

第二次更新文本输入字段后,Reaction崩溃

如何在不影响隐式类型的情况下将类型分配给对象?

使用Ace编辑器对子组件实例的native-element 进行Angular 获取时面临的问题

如何为仅有数据可用的点显示X轴标签?

用于测试其方法和构造函数的导出/导入类

为什么当雪碧的S在另一个函数中时,Phaser不能加载它?

JQuery使用选项填充HTMLSELECT并设置默认结果,默认结果显示为空

$GTE的mongoose 问题

扩散运算符未按预期工作,引发语法错误

当S点击按钮时,我如何才能改变它的样式?

将字符串解释为数字;将其重新编码为另一个基数

如何按区域进行过滤并将其从结果数组中删除?

为什么我的InDesign Java脚本不能完全工作?