【问题标题】:Comparison of insertion sort and bubble sort插入排序和冒泡排序的比较
【发布时间】:2014-06-02 06:54:33
【问题描述】:

我试图找出这两种算法执行所花费的实际时间,并且我发现与互联网上许多地方的信息不一致,这些信息表明插入排序更好。然而,我发现冒泡排序执行得更快。我的代码如下。

冒泡排序

for(int j = 0; j < a.length - 1; j++){
    for(int i = 0; i < a.length - 1 - j; i++) {
        count++;
        if(a[i] > a[i+1]){
            temp = a[i];
            a[i] = a[i + 1];
            a[i + 1] = temp;
        }
    }
}

插入排序

for(int i = 1; i < a.length; i++){  
    for(int j = i - 1; j >= 0; j-- ){   
        if(a[j] > a[i]) {
            temp = a[j];
            a[j] = a[i];
            a[i] = temp;
        }
    }
}

我是这样计算开始和结束时间的。

long startTime = System.currentTimeMillis();
.....your program....
long endTime   = System.currentTimeMillis();
long totalTime = endTime - startTime;
System.out.println(totalTime);

我发现,对于插入排序,10 次运行的平均时间为 13,而对于冒泡排序,它仅为 5。对此有什么解释吗?

【问题讨论】:

标签: algorithm sorting runtime bubble-sort insertion-sort


【解决方案1】:

您错误地实现了插入排序。应该是插入排序的代码甚至没有对数组进行排序;例如,在输入上尝试

int a[] = {4, 2, 3, 1, 5};

给出输出

[2, 3, 1, 4, 5]

查看演示:http://ideone.com/aFCPft

鉴于代码不起作用,计时数据并不能告诉我们太多。

【讨论】:

  • 抱歉编辑了代码,现在结果似乎与其他人的发现相符。谢谢!
【解决方案2】:

你要排序多少个元素? 只是为了确保我通常在这些测试中采用 longint.max 元素的方式没有模糊的恒定成本。 此外,如果您排序的元素不够多,那么您的 CPU 可能由于某种原因正在忙。元素越多,错误源的相关性就越低。

但是,是的,听起来很奇怪。也许有一些针对愚蠢循环的编译器优化不适用于优化循环?

出于好奇:您是否尝试过 32 位和 64 位应用程序?结果有时可能会有所不同:O

【讨论】:

  • 当然。你可以从那一点往下走。但这应该不止几秒钟。我认为 1 分钟左右的时间代表长时间计算;)
猜你喜欢
  • 2012-05-12
  • 2023-03-20
  • 2019-05-10
  • 2015-04-25
  • 2011-11-30
  • 2018-10-01
  • 2013-06-20
  • 2012-08-26
  • 1970-01-01
相关资源
最近更新 更多