当使用大型数组的冒泡排序时,Java程序与StackOverflow崩溃

Java program crashes with StackOverflow when using bubble sort of a large array

我编写了一个小型的Java程序,用于实现int数组的冒泡排序技术。它适用于1000个单元的数组,但当我将其增加到10000时,它会崩溃,并出现java.lang.StackOverflowError。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import java.util.*;
import java.lang.*;

class BubbleSort
{
  public static void main (String [] argv)
  {
    int Array [] = new int [10000];
    for (int a = 0; a < 10001; a++)
    {
    Array[a] = (int) (Math.random()*100);
    }  
    // generated an array of 10000 units and filled with random numbers

    for (int end = Array.length-1; end >= 0; end--)
    {
      BubbleSort (Array, 0, end);
    }

  }


  public static int BubbleSort (int A [], int count, int end)
  {

    if (count == end) //debugger says crash occurs here
    {
      return count;
    }

    else
    {

       if (A[count] > A[count+1])
       {
         int temp = A[count];
         A[count] = A[count+1];
         A[count+1] = temp;

         return BubbleSort(A, count+1, end); //and here

       }

     else
     {
        return BubbleSort(A, count+1, end);
     }
  }

 }
}

任何帮助都非常感谢!


撇开逻辑,为什么它在EDCOX1(0)中失败的技术原因是因为Java中的每个线程都有固定的堆栈大小。当你使用10000的时候,它找不到足够的内存。

使用-XX:ThreadStackSize=512增加jvm分配给线程的默认内存,它可以工作。但一般来说你不必为此烦恼。

另一方面,检查一下这里是否真的需要递归。