我可以使用双循环来对List进行排序吗?

时间:2018-01-22 14:13:19

标签: java list sorting collections

使用Collections.sort()方法和我对List进行排序的实现有什么区别?哪个更快?

public static void listSortingDoubleForLoop(List<Integer> list)
{
    for (int i = 0; i < list.size(); i++) {
        for (int j = i+1; j < list.size(); j++) {
            if (list.get(i).compareTo(list.get(j)) > 0) {
                Collections.swap(list, i, j);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:3)

你的两个嵌套for循环需要二次运行时间(即O(n 2 ))。

Collections.sort()的JDK实现使用更高效的O(nlogn)排序算法。

例如,以下是JDK 8的实现说明:

  

此实现是一个稳定的,自适应的迭代合并输出,当输入数组部分排序时,需要远小于n lg(n)比较,同时提供传统合并的性能当输入数组随机排序时。如果输入数组接近排序,则实现需要大约n次比较。

传统合并排序的性能是O(nlog(n))。