繁体   English   中英

快速排序中无输出

[英]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.lowl.high有关。 我假设l是一个数组,在这种情况下,这两个对象都旨在访问lowhigh的索引。 如果是这种情况,则它们应该为l[low]l[high]

由于您似乎要尝试就地版本的快速排序,因此请查看此处提供的功能: 就地快速排序

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM