当前位置: 首页 > 面试题库 >

提供堆栈溢出错误的简单QuickSort算法?

白镜
2023-03-14
问题内容

我的朋友有一个小问题,我已不知所措。他编写了一个简单的(在学校就读到的)QuickSort算法,它产生了StackOverflow错误。我知道这意味着它在某处多次调用自身递归,但是我无法获得逻辑错误-
请帮助我!

这是代码(我在这里省略了一些代码,仅是为了在2个文本区域中显示它):

int array [] = new int [10];
...
 public static void quicksort (int array[],int l,int r){
int i = l;
int j = r;
int mitte = array [(l+r)/2];

while (i<j) {
  while  (array[i]<mitte) {
    i++;
  } // end of if
  while  (mitte<array[i]) {
    j--;
  } // end of if
  if (i<=j) {
    int merke =array[i];
    array[i] = array [j];
    array [j] = merke ;
    i++;
    j--;
  } // end of if
  if (i<j) {
    quicksort(array,l,j);
  } // end of if
  if (l<r) {
    quicksort(array,l,r);
  } // end of if
} // end of while
}

它的名称如下:

 quicksort(array,0,9);

但是,如果我们将其称为2个数字相同,则不会产生溢出。

如果需要更多代码,这是pastebin上的完整代码:http :
//pastebin.com/cwvbwXEu


问题答案:

首先,这里有一个无限循环

while  (mitte<array[i]) {
    j--;
  } // end of if

它必须是 array[j]

其次(并导致无限递归),在第二次对quicksort的调用中

if (l<r) {
  quicksort(array,l,r);
} // end of if

递归时,您总是需要缩短自己的调用范围,否则它将是无限的。我还没有弄清楚您在做什么,但我认为您的意思是:

if (i<r) {
   quicksort(array,i,r);
 } // end of if


 类似资料:
  • 问题内容: 下面给出的代码显示了运行时的Stackoverflow错误。但是,如果我使另一个类CarChange创建Car的对象,它将成功运行。我是一个初学者,请执行以下代码以了解在Java中进行向上转换的重要性。 问题答案: 一个stackoverflow通常意味着您有一个无限循环。 收到此消息的原因是因为您从testdrive方法调用驱动器,并且在该方法中再次调用drive。

  • 我有一个类 Delete 我想使用 Gson 库将其转换为 json,但是当我转换它时,它会抛出 这是我的类 这里是枚举类DeleteStatus.scala 删除原因.scala 以下是我如何在Json转换 但它抛出以下异常 请帮助其中的错误

  • 问题内容: 我在表上进行了非常简单的更新,这也触发了一个非常简单的触发器,这给了我错误 我执行的查询: 值字段是一个字段。因此,从理论上讲,它可能变得安静。在这种情况下情况并非如此。 正在执行的触发器是: 为什么显示此错误?好像没有涉及任何繁重的查询。另请注意,数据库几乎是空的,其中只有2行,而 MySQL版本:5.1.44 问题答案: 错误1436对应于mysql 5.1代码中的ER_STACK

  • 我有一个执行快速排序的应用程序。在我开始给它一些更大的数字(我第一次得到它是10000000)之前,它工作得很好。我知道是由递归引起的,但我不明白为什么我的应用程序会因此而崩溃。如有任何建议,将不胜感激。这是我的密码:

  • 我有一个文件解析器代码,偶尔会在m.matches()上出现堆栈溢出错误(其中m是匹配器)。 我再次运行我的应用程序,它解析相同的文件,没有堆栈溢出。 我的模式确实有点复杂。它基本上是一组可选的零长度正lookahead,其中包含命名组,这样我就可以匹配一组变量名/值对,而不考虑它们的顺序。但我认为,如果某个字符串会导致堆栈溢出错误,它总是会导致它。。。不只是有时候。。。有什么想法吗? 我的模式

  • 问题内容: TL; DR: 将任何非内置函数添加到Array.prototype AND Function.prototype将导致IE8本机JSON解析器在解析包含数组的任何JSON时发生堆栈溢出,但仅当您还传递了reviver函数时放入JSON.parse()。 最初这是一个问题,但我回答了我自己的原始问题,所以现在我要问:有人能想到此IE8错误的解决方法,该方法不涉及消除所有修改Array.