【问题标题】:Understanding the Sort Algorithm in Groovy理解 Groovy 中的排序算法
【发布时间】:2017-10-01 17:20:49
【问题描述】:

当我们使用排序时,为什么数组中的第二项是第一个元素 (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]

【问题讨论】:

  • 参数的顺序无所谓吧?这是一个实现细节
  • 是的,没错,我想我想了解这里的排序机制是什么。它是如何排序的?为什么 a, b -> a b 进行 asc 排序,而 a, b -> b a 进行 desc 排序?我假设 a b 等于 (a > b) ?返回 1 : (a
  • 是的,和比较器一样

标签: sorting groovy closures


【解决方案1】:

当您要求 Groovy 对您的项目进行排序时,它不会按顺序处理。 Groovy 在后台使用集合排序。这可以以多种方式排序。传统方式是归并排序。例如,如果您使用的是 Java 8,它将执行 TimSort https://en.wikipedia.org/wiki/Timsort,具体取决于您是否打开了旧合并排序 (Arrays.LegacyMergeSort.userRequested)。与基本的冒泡排序相比,该算法不只是按顺序遍历列表并比较每个项目。这就是为什么当您将打印件放入比较器时,所比较的内容似乎是随​​机的 - 这只是为了加快排序速度而进行的优化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 2014-01-13
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    相关资源
    最近更新 更多