gpt4 book ai didi

c++ - 排序堆栈溢出和比较数以及负交换数

转载 作者:行者123 更新时间:2023-11-28 03:46:33 26 4
gpt4 key购买 nike

我编写了这个冒泡排序并将其用于测试程序,该程序根据用户输入的数量在列表中给出随机数。然后给它一个包含 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();
}

}
}

最佳答案

你的程序是递归的,可能是我见过的第一个递归冒泡排序:-)

递归意味着函数在工作完成之前不会返回,而是每次调用 sort() 时都会将额外的调用压入堆栈。在多次递归调用后,堆栈已满并溢出。

所以,去掉递归,这里用处不大,用个循环就好了。

关于获得负值的变量,首先去除 mySwaps、myTime 和 myCompare 上的静态修饰符,因为它会在每次测试运行时抑制它们的正确初始化。

关于c++ - 排序堆栈溢出和比较数以及负交换数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7433140/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com