我在使用Java中的自定义比较器了解排序时遇到了麻烦。
import os
trainDir = 'training/'
testDir = 'testing/'
array2D = []
for filename in os.listdir(trainDir,testDir):
if filename.endswith('.txt'):
array2D.append(str(filename))
print(array2D)
给我升序排序,而
Queue<Integer> q = new PriorityQueue<>(arr.length, (a,b) -> a-b);
给我降序排列。
我不明白这是怎么工作的? Queue<Integer> q = new PriorityQueue<>(arr.length, (a,b) -> b-a);
是传入元素,而b
是否已经在数组中,反之亦然?另外,如何获得升序或降序?
如果a
表示a-b > 0
,那么a>b
是否应该以升序位于b
的前面?
答案 0 :(得分:2)
基于比较的排序通过确定值是a
,<
还是=
来区分值。
例如>
,3 < 4
,4 = 4
。
Java比较器use the convention
4 > 3
的意思是cmp(a, b) < 0
a < b
的意思是cmp(a, b) = 0
a = b
的意思是cmp(a, b) > 0
请注意,这意味着如果a > b
,您将获得整数的常规排序。您可以检查一下自己cmp(x, y) = x - y
是否提供了相反的顺序。
排序时(或执行其他操作以按顺序移动通用元素,例如PriorityQueue)时,该算法将(反复)咨询比较器以确定是否已将其赋予的值设为cmp(x, y) = -(x- y) = y - x
, <
或=
。