Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 理解Groovy中的排序算法_Sorting_Groovy_Closures - Fatal编程技术网

Sorting 理解Groovy中的排序算法

Sorting 理解Groovy中的排序算法,sorting,groovy,closures,Sorting,Groovy,Closures,当我们使用sort时,为什么数组中的第二项是第一个元素。 看看这个例子,有什么我不明白的吗 def array = [4,2,7] def listSorter = {a,b -> println "a: " + a; println "b: " + b; a <=>b; } array = array.sort(listSorter); println array; 当您要求Groovy对项目进行排序时,它不会按顺序进行处理。G

当我们使用sort时,为什么数组中的第二项是第一个元素。 看看这个例子,有什么我不明白的吗

def array = [4,2,7]


def listSorter = {a,b -> 

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

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

当您要求Groovy对项目进行排序时,它不会按顺序进行处理。Groovy在封面下使用集合排序。这可以通过多种方式进行排序。传统的方法是合并排序。例如,如果您使用的是Java 8,它将根据您是否启用了旧版合并排序数组.LegacyMergeSort.userRequested来执行TimSort。与基本的冒泡排序相比,该算法不只是按顺序遍历列表并比较每个项目。这就是为什么当您将打印放入比较器时,所比较的内容似乎是随机的-这只是一种优化,以使排序更快。

参数的顺序无关紧要,不是吗?这是一个实现细节是的,这是真的,我想我正在试图理解这里的排序机制是什么。如何分类?。为什么a,b->a b在进行asc排序,而a,b->b a在进行desc排序?我假设a b等于a>b?返回1:aa: 2 b: 4 a: 7 b: 2 a: 7 b: 4 [2, 4, 7]