比较两种选择排序方法

时间:2017-03-18 18:32:22

标签: java arrays sorting

这个问题类似于(link),但不完全是我要找的。这是我在下面写的一个选择类型,它是用Java编写的。

public void sort() {

    int smallIndex;

    for(int i = 0; i < arr.length; i++) {

        smallIndex = i;

        for (int j = i + 1; j < arr.length; j++) {
            if (arr[j] < arr[smallIndex]) {

                smallIndex = j;
            }
        }

        if(i < smallIndex)
            swap(i, smallIndex);
    }
}

这是我的交换方法。

public void swap(int a, int b) {

    int temp = arr[a];
    arr[a] = arr[b];
    arr[b] = temp;
}

我在0到999之间填充了一个包含50,000个随机元素的数组。该方法对它进行了排序。每次执行大约1400毫秒(1300-1500)。

这是我正在看的一本书的选择。

public void sortBook() {

    for(int i = 0; i < arr.length; i++) {

        int minPos = minimumPosition(i);
        swap(minPos, i);
    }
}

这是minimumPosition方法。

public int minimumPosition(int from) {

    int minPos = from;

    for(int i = from + 1; i < arr.length; i++) {

        if(arr[i] < arr[minPos]) {

            minPos = i;
        }
    }

    return minPos;
}

交换方法是我从上面使用的方法。对于50,000个元素,范围为0 - 999,我一直在执行大约700毫秒的执行时间。

我的问题是为什么sort()的执行时间几乎是sortBook()的两倍。我已经在较小的数组上逐步完成它们,它们似乎采取相同的步骤来执行相同的操作,sort()有时只进行交换,sortBook()每次都交换。对我的新手来说,他们看起来几乎完全一样。

我不明白为什么sort()大约是sortBook()的两倍。任何人都有任何见解,为什么会这样?

2 个答案:

答案 0 :(得分:0)

我可以在您的代码库中看到的额外比较步骤之一是

join

请你这一步,看看你是否得到了相同的结果。

答案 1 :(得分:0)

首先,没有任何数学原因你的数学原理应该比书中的慢,它们表面上是相同的。 当我把它们互相对抗时,我给你的约400毫秒和书的450分钟。我认为问题来自你的时间,通常变化可能是因为cpu在运行时做了其他的事情,所以我看到任何差异我看到错误分析下的分散。即使你的标识符的时差几乎毫无意义,在这个尺度上它与时间的差异无关。此外,如果效率是非常重要的,那么尝试实现heapSort以获得有趣的挑战,我建议使用c或c ++,这样可以提供更好的性能。玩得开心!