插入排序与Java的Collections.sort()的性能比较

时间:2015-04-14 15:04:09

标签: java sorting collections

在我的复杂性敏感应用程序中,我尝试通过迭代测量按这两种方式排序所需的时间来分析Insertion sort和Java Collections.sort()的性能。 我使用了以下Insertion sort逻辑

 void applyInsertionSort(ArrayList<Integer> list0) {
    ArrayList<Integer> list = new ArrayList<>(list0);
    long startTime = System.nanoTime();
    for (int i = 1; i < list.size(); i++) {
        int eleToBeSorted = list.get(i);
        for (int j = i; j > 0; j--) {
            if (eleToBeSorted < list.get(j - 1)) {
                int temp = list.get(j - 1);
                list.set(j - 1, eleToBeSorted);
                list.set(j, temp);
            }
        }
    }
    long elapsed = System.nanoTime() - startTime;
    insSortTime.add((double) elapsed / 1000000); //Record elapsed time(Millis)
    return list;
}

在另一种方法中,我使用了Collections.sort()

void applyCollectionsSort(ArrayList<Integer> list0) {
    ArrayList<Integer> list = new ArrayList<>(list0);
    long startTime = System.nanoTime();
    Collections.sort(list);
    long elapsed = System.nanoTime() - startTime;
    collSortTime.add((double) elapsed / 1000000); //Record elapsed time(Millis)
    return list;
}

然后我迭代地(2000次迭代)通过在每次迭代结束时对原始list中的元素进行混洗来独立地调用这些方法。

 for (int i = 0; i < iterations; i++) {
        applyInsertionSort(list);
        applyCollectionsSort(list);
        Collections.shuffle(list);
 }

enter image description here

我有以下问题

  1. 为什么在第一次迭代中Collections.sort()花了相当长的时间来排序?
  2. 为什么Collections.sort()的性能在系列的中间部分降级,如图所示,即使根据Java docCollections.sort()使用优化版本的合并排序提供保证表现为n logn

0 个答案:

没有答案