algorithm - 插入排序和冒泡排序的比较

标签 algorithm sorting runtime bubble-sort insertion-sort

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

冒泡排序

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。对此有任何解释吗?

最佳答案

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

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

给出输出

[2, 3, 1, 4, 5]

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

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

关于algorithm - 插入排序和冒泡排序的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23988807/

相关文章:

algorithm - 设计小型可比对象

c++ - 使用树的霍夫曼解码问题

c++ - 与 2,3 和更多整数的子集和相关的想法

c++ - 绝对值排序,使用自定义比较器

python - 根据元素距离交错两个 numpy 数组(python)

javascript - 如何使用正则表达式对数组中的 Javascript 对象进行排序

java - 在运行时动态创建JTable

c++ - 是否可以从 Objective-C 获得中间 C 代码?

javascript - 增加或减少色彩饱和度

python - 如何告诉程序每天在准确的时间做某事?