快速排序中没有输出

时间:2015-01-15 13:32:44

标签: javascript algorithm sorting quicksort

我正在尝试在JavaScript中实现quicksort函数:

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)。也许我错过了一些东西。谁能指出我正确的方向?如何调试这类问题?

2 个答案:

答案 0 :(得分:1)

正如你所说,数组的第一个元素将被用作一个临时变量,它只对算法的执行有用,而且一开始并不清楚!

您的算法运行正常,但打印结果时遇到问题!

要获得您想要的内容,您需要通过在shift()块中添加quickSort()函数来删除第一个元素,以便它变为:

function quickSort(l) {
  qsort(l, 1, l.length - 1);
  l.shift(); // add this function
  return l;
}

如果你想使用splice()函数删除第一个元素并且具有以下形式,还有另一个解决方案:

array.splice(indexToRemove, numberToRemove);

所以要获得所需的resutl,请将上面的说明添加到quickSort()函数中,如下所示:

function quickSort(l) {
  qsort(l, 1, l.length - 1);
   l.splice(0, 1); //add this line
  return l;
} 

这是我猜你的问题的两个解决方案。希望它有所帮助!!

答案 1 :(得分:0)

我相信您的算法存在一些问题。但我能立即注意到的一个问题与您在l.low函数中使用l.highpartition有关。我假设l是一个数组,在这种情况下,这两个数据都旨在访问lowhigh的索引。如果属于这种情况,则应为l[low]l[high]

由于您似乎正在尝试进行快速排序的就地版本,请查看此处提供的内容:In Place Quick Sort