理解Groovy中的排序算法

时间:2017-05-03 18:24:48

标签: sorting groovy closures

当我们使用sort时,为什么数组中的第二项是第一个元素(a)。 看看这个例子,有什么我没有得到的吗?

def array = [4,2,7]


def listSorter = {a,b -> 

      println "a: " + a;
      println "b: " + b;
      a <=>b;

}
array = array.sort(listSorter);
println array;

打印出来:

a: 2
b: 4
a: 7
b: 2
a: 7
b: 4
[2, 4, 7]

1 个答案:

答案 0 :(得分:0)

当您要求Groovy对您的商品进行分类时,它不符合要求。 Groovy在封面下使用集合排序。这可以以多种方式排序。传统方式是合并排序。例如,如果您使用的是Java 8,它将执行TimSort https://en.wikipedia.org/wiki/Timsort,具体取决于您是否启用了旧版合并排序(Arrays.LegacyMergeSort.userRequested)。与基本冒泡排序相比,算法不仅按顺序遍历列表并比较每个项目。这就是为什么当您将打印件放入比较器时,它似乎是随机的比较 - 这只是一种优化,使排序更快。