我写了这个冒泡排序,并在一个测试程序中使用它,该程序按照用户输入的数量给出列表中的随机数。然后给它一个10,000个随机整数的列表,并返回一个堆栈溢出,在第55行"if (swaps != 0){sort();}“这是为什么。有时它也是有效的,但返回的myCompares和mySwaps值为负值。你能帮上忙吗?
public class Bubbly {
private int[] sortedList;
private static long myTime = 0;
private static int myCompares = 0;
private static int mySwaps = 0;
public Bubbly(int[] list) {
sortedList = list;
StopWatch stop = new StopWatch();
stop.start();
sort();
stop.stop();
myTime = stop.getElapsedTime();
}
public int[] getList(){
return sortedList;
}
public long getTime(){
return myTime;
}
public int getCompares(){
return myCompares;
}
public int getSwaps(){
return mySwaps;
}
public void sort(){
int length = sortedList.length, i = 0, num, swaps = 0;
while (i < length - 1){
if (sortedList[i] > sortedList[i + 1]) {
myCompares++;
num = sortedList[i];
sortedList[i] = sortedList[i+1];
sortedList[i+1] = num;
swaps++;
mySwaps++;
}
myCompares++;
i++;
}
if (swaps != 0){
sort();
}
}
}发布于 2011-09-15 23:15:42
你的程序是递归的,可能是我见过的第一个递归冒泡排序:-)
递归意味着函数直到工作完成才会返回,而每次调用sort()时,都会将一个额外的调用推送到堆栈上。在多次递归调用之后,堆栈已满并溢出。
所以,去掉递归,它在这里是没有用的,只使用一个循环。
对于得到负值的变量,首先去掉mySwaps、myTime和myCompare上的静态修饰符,因为它会阻止它们在每次测试运行时正确初始化。
https://stackoverflow.com/questions/7433140
复制相似问题