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的时候,它找不到足够的内存。
使用
另一方面,检查一下这里是否真的需要递归。