Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 排序堆栈溢出和比较数和交换数为负数_C++_Sorting_Int_Stack Overflow_Bubble Sort - Fatal编程技术网

C++ 排序堆栈溢出和比较数和交换数为负数

C++ 排序堆栈溢出和比较数和交换数为负数,c++,sorting,int,stack-overflow,bubble-sort,C++,Sorting,Int,Stack Overflow,Bubble Sort,我编写了这个冒泡排序,并在一个测试程序中使用它,该程序根据用户输入的数量在列表中给出随机数。然后给它一个10000个随机整数的列表,并在第55行返回堆栈溢出“if(swaps!=0){sort();}”这是为什么。有时它也会起作用,但会为myCompares和myswap返回一个负值。你能帮忙吗 public class Bubbly { private int[] sortedList; private static long myTime = 0; private

我编写了这个冒泡排序,并在一个测试程序中使用它,该程序根据用户输入的数量在列表中给出随机数。然后给它一个10000个随机整数的列表,并在第55行返回堆栈溢出“if(swaps!=0){sort();}”这是为什么。有时它也会起作用,但会为myCompares和myswap返回一个负值。你能帮忙吗

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();
        }

    }
}
公共类冒泡{
私人内部分类列表;
私有静态长myTime=0;
私有静态int myCompares=0;
私有静态int mySwaps=0;
公共泡泡(int[]列表){
分类列表=列表;
秒表停止=新秒表();
停止。开始();
排序();
停,停();
myTime=stop.getElapsedTime();
}
public int[]getList(){
返回分类列表;
}
公共长getTime(){
返回myTime;
}
public int getCompares(){
返回myCompares;
}
公共int getSwaps(){
返回mySwaps;
}
公共无效排序(){
int length=sortedList.length,i=0,num,swaps=0;
而(i分类列表[i+1]){
myCompares++;
num=分类列表[i];
分类列表[i]=分类列表[i+1];
分类列表[i+1]=num;
交换++;
mySwaps++;
}
myCompares++;
i++;
}
如果(掉期!=0){
排序();
}
}
}

您的程序是递归的,可能是我见过的第一个递归bubblesort:-)

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

所以,摆脱递归,它在这里没有用处,只需要使用一个循环

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