如何通过快速排序算法实现避免堆栈溢出错误

时间:2017-03-21 02:33:05

标签: java algorithm stack-overflow quicksort

// 如果像我一样,目标是在其他一些代码中使用该算法(而不是对算法本身进行编码),Arrays.sortDocumentation here)完成了这项工作! //

我一直收到这个错误:

Exception in thread "main" java.lang.StackOverflowError
at language.LanguageDetection.sort(LanguageDetection.java:140)
at language.LanguageDetection.sort(LanguageDetection.java:141)
at language.LanguageDetection.sort(LanguageDetection.java:141)

这一行:

at language.LanguageDetection.sort(LanguageDetection.java:141)

填充控制台输出的其余部分。

我是java的初学者,我正在尝试实现快速排序算法,以便对包含所有词典单词的文本文件进行排序,这样我就可以快速搜索它。

我真的不知道这是否可行,或者是否有更适合此问题的排序算法,但这里是代码:

public static void sort(String[] unsorted, int startIndex, int endIndex)
{
 if(endIndex - startIndex <= 0) return; //Ends the recursion when unsorted array is of size 1
 String temp;

 char pivot = unsorted[endIndex].charAt(0);

 int j = startIndex;
 for(int i = startIndex; i < endIndex; i++)
 {
  if(unsorted[i].charAt(0) < pivot)
  {
   temp = unsorted[j];
   unsorted[j] = unsorted[i];
   unsorted[i] = temp;
   j++;
  }
 }
 temp = unsorted[j];
 unsorted[j] = unsorted[endIndex];
 unsorted[endIndex] = temp;

 sort(unsorted, startIndex, j - 1);
 sort(unsorted, j + 1, endIndex);

}

我不想拥有代码的所有更正版本,只是一些答案,我编码错误以及是否有更好的方法。

提前致谢。

1 个答案:

答案 0 :(得分:1)

简单的解决方案:

Quicksort将输入数组分成两个子数组,然后对子数组进行排序。要对子数组进行排序,首先递归以对较小的进行排序,然后循环以对较大的进行排序。。

由于每次递归调用都是&lt; =调用者大小的一半,因此递归深度限制为log(N)。