【发布时间】:2017-05-07 13:39:53
【问题描述】:
我有一个代码 sn-p,它在数组中找到中位数,然后根据与中位数的接近程度对该数组进行排序(从最小到最大),但我不明白这些东西是如何工作的
public static Integer[] sort(Integer[] array)
{
Arrays.sort(array);
final double median;
if (array.length % 2 == 0)
median = ((double)array[array.length/2-1]+ (double)array[array.length/2])/2;
else
median = array [array.length/2];
Comparator<Integer> compareToMedian= new Comparator<Integer>()
{
@Override
public int compare(Integer o1, Integer o2)
{
double value = Math.abs(o1 - median) - Math.abs(o2 - median);
if (value == 0)
value = o1 - o2;
return (int)value;
}
};
Arrays.sort(array, compareToMedian);
return array;
}
我真正感到困惑的是在这种特殊情况下价值的确切含义。它只是从最小到最大排序结果吗?就像我有result 在一种情况下等于-5,在另一种情况下等于-2 和3,最终它变成-5、-2、3?并对数组进行排序?
【问题讨论】:
-
您是否阅读了
Comparator.compare的文档?您在调试此代码方面尝试过什么?目前,您的“像我一样”这句话对我来说没有多大意义,尤其是result不会出现在代码中的任何地方...... -
:(:(:(:(:(:(:(:(
-
您是在问
compare的返回值是什么意思,还是在问Math.abs(o1 - median) - Math.abs(o2 - median)的数学运算原理?另请参阅docs.oracle.com/javase/tutorial/collections/interfaces/…。 -
我在问排序基于什么。返回值还是什么?如果是这样,它是如何工作的?
-
我想你的意思是
compare,而不是compareTo。Comparator有compare,这就是您的代码中的内容。Comparable有compareTo。
标签: java comparator compareto