首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sort Stack Overflow和Number of Compare and Swaps负数

Sort Stack Overflow和Number of Compare and Swaps负数
EN

Stack Overflow用户
提问于 2011-09-15 23:08:53
回答 1查看 74关注 0票数 0

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

代码语言:javascript
复制
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();
        }

    }
}
EN

回答 1

Stack Overflow用户

发布于 2011-09-15 23:15:42

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

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

所以,去掉递归,它在这里是没有用的,只使用一个循环。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7433140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档