插入排序实现差异

时间:2012-12-11 12:15:03

标签: java sorting

我已经通过两种不同的方式看到了插入排序的实现,如下所示,

方法1:

        for (int out = 1; out < numbers.length; out++) {

        int temp = numbers[out];
        int in = out - 1;
        while (in >= 0 && numbers[in] > temp) {

            numbers[in + 1] = numbers[in];
            numbers[in] = temp;
            in--;
        }

        }

方法2:

int S[] = { 20, 25, 10};
    int N = S.length;

    for (int i = 1; i < N; i++) {
        int j = i - 1;
        int temp = S[i];

        while (j >= 0 && S[j] > temp) {
        S[j + 1] = S[j];
        j--;
        }

        S[j + 1] = temp;
    }

但我无法理解为什么在第二种方法中交换是在while循环之外?是否有理由让它在while循环中出现?

2 个答案:

答案 0 :(得分:0)

这两个版本功能相同。后者只是避免做一些不必要的工作。

在第一个版本中,以下作业

numbers[in] = temp;
如果循环继续,

将在循环的下一次迭代中撤消。第二个版本注意到这个事实,并且在完成循环之前不需要恢复temp

答案 1 :(得分:0)

基本上它是相同的,但在第一个中,你只是将临时数字立即写入你复制到元素[in + 1]的那个。在第二个,你等到你的循环结束。所以这只是节省了一些时间。