首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择排序定时

选择排序定时
EN

Stack Overflow用户
提问于 2014-09-20 18:13:11
回答 1查看 178关注 0票数 0

我编写了一个快速选择排序程序,如下所示:

代码语言:javascript
复制
public static ArrayList<Integer> selectionSort(ArrayList<Integer> list) {
        for (int i=0; i < list.size()-1; i++) {
            int smallestElement = i;
            for (int j=i+1; j < list.size(); j++) {
                if (list.get(j) < list.get(smallestElement)) {
                    smallestElement = j;
                }
            }
            swapPosition(list, smallestElement, i);
        }

        return list;
    }

    public static void swapPosition(ArrayList<Integer> list, int first, int second) {
        Collections.swap(list, first, second);
    }

在我的主程序中,我计算程序运行所需的时间(毫秒)。我创建了一个由1000个项组成的新ArrayList,这些项已经被排序并计算了最佳案例场景时间。然后,我颠倒了1000项的顺序,以表示必须交换所有项目时的最坏情况情况,但由于某种原因,我的最坏情况场景所花费的时间少于我的最佳情况。在最好的情况下,不应该交换任何东西。为什么我的程序在最好的情况下运行比在最坏的情况下花费更多的时间?这里是其余部分的代码:

代码语言:javascript
复制
ArrayList<Integer> bestCase = new ArrayList<Integer>();
        for (int i=1; i < 1001; i++) {
            bestCase.add(i);
        }
        long startTimeBest = System.currentTimeMillis();
        selectionSort(bestCase);
        long endTimeBest = System.currentTimeMillis();
        long totalTimeBest = endTimeBest - startTimeBest;
        System.out.println("Total time of this program in the best case "
                + "scenario is: " + totalTimeBest + " millisecond(s)");

        Collections.reverse(bestCase);
        long startTimeWorst = System.currentTimeMillis();
        selectionSort(bestCase);
        long endTimeWorst = System.currentTimeMillis();
        long totalTimeWorst = endTimeWorst - startTimeWorst;
        System.out.println("Total time of this program in the worst case "
                + "scenario is: " + totalTimeWorst + " millisecond(s)");

最好的时间是16毫秒,最坏的是4毫秒。这没道理。

EN

回答 1

Stack Overflow用户

发布于 2014-09-20 19:04:33

除了测试技术的问题外,似乎还有另一个问题。

“然后,我颠倒了1000项的顺序,以表示所有项目都必须交换时的最坏情况,但由于某种原因,我最坏的情况下所用的时间少于我的最佳情况。在最好的情况下,不需要交换任何东西。”

在您的程序中,执行的交换(swapPosition(...)调用)的数量并不取决于要排序的元素的顺序。

执行的smallestElement = j;指令的数量确实取决于顺序。

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

https://stackoverflow.com/questions/25951877

复制
相关文章

相似问题

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