[英]No output in quicksort
我正在尝试在JavaScript中实现快速排序功能:
function partition(l, low, high) {
l[0] = l[low];
var pivotkey = l[low];
while (low < high) {
while (low < high && pivotkey <= l[high]) {
--high;
}
l[low] = l[high];
while (low < high && l[low] <= pivotkey) {
++low;
}
l[high] = l[low];
}
l[low] = l[0];
return low;
}
function qsort(l, low, high) {
var pivotloc;
if (low < high) {
pivotloc = partition(l, low, high);
qsort(l, low, pivotloc - 1);
qsort(l, pivotloc + 1, high);
}
return;
}
function quickSort(l) {
qsort(l, 1, l.length - 1);
return l;
}
console.log(quickSort([0, 1, 4, 3]));
但是该程序在终端(带有node qsort.js
)中什么也不输出。 也许我想念一些东西。 谁能指出我正确的方向? 如何调试此类问题?
因此,正如您所说,数组的第一个元素将用作临时变量,该临时变量仅对算法的执行有用,一开始并不清楚!
您的算法工作正常,但是在打印结果时遇到了问题!
为了得到想要的东西,您需要通过在quickSort()
块中添加shift()
函数来摆脱第一个元素,使其变为:
function quickSort(l) {
qsort(l, 1, l.length - 1);
l.shift(); // add this function
return l;
}
如果需要,还有另一种解决方案,方法是使用splice()
函数,该函数也删除第一个元素并具有以下形式:
array.splice(indexToRemove, numberToRemove);
为了获得所需的结果,将上述指令添加到您的quickSort()
函数中,如下所示:
function quickSort(l) {
qsort(l, 1, l.length - 1);
l.splice(0, 1); //add this line
return l;
}
这是我想为您解决的两个解决方案。 希望能帮助到你 !!
我相信您的算法有几个问题。 但是我立即注意到的与您在partition
函数中使用l.low
和l.high
有关。 我假设l
是一个数组,在这种情况下,这两个对象都旨在访问low
和high
的索引。 如果是这种情况,则它们应该为l[low]
和l[high]
。
由于您似乎要尝试就地版本的快速排序,因此请查看此处提供的功能: 就地快速排序
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.