然而,我发现冒泡排序的执行速度更快。我的代码如下。
冒泡排序
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次。这有什么解释吗?
发布于 2014-06-02 15:14:23
你错误地实现了插入排序。被认为是插入排序的代码甚至没有对数组进行排序;例如,在输入上尝试它
int a[] = {4, 2, 3, 1, 5};给出输出
[2, 3, 1, 4, 5]查看演示:http://ideone.com/aFCPft
考虑到代码不工作,计时数据不能告诉我们太多信息。
发布于 2014-06-02 15:03:17
您要对多少个元素进行排序?只是为了确保没有模糊的固定成本,我通常在这些测试中采用类似longint.max元素的方式。此外,如果您排序的元素不够多,则可能是因为某些原因,此时您的CPU正处于繁忙状态。元素越多,错误源的相关性就越小。
但是,是的,听起来很奇怪。也许有一些针对愚蠢循环的编译器优化对优化后的循环无效?
出于好奇,你有没有尝试过32位和64位的应用程序?结果有时可能不同:O
https://stackoverflow.com/questions/23988807
复制相似问题