帮我实现一个java算法题,给定一个数组,里面包含若干个正负的整数,举例有 -3,-4, -2, 0, 1, 4, 2, 5。排序结果为 0, 1, 2, -2, -3, 4, -4, 5。即按照距离0最近来排序,整数比负数有更高优先级。
要实现这个排序算法,我们可以使用自定义的比较器来对数组进行排序。Java 提供了 Arrays.sort
方法,可以接受一个比较器来定义排序规则。我们可以根据题目要求来实现这个比较器。
具体步骤如下:
Arrays.sort
方法对数组进行排序。下面是完整的代码实现:
import java.util.Arrays;
import java.util.Comparator;
public class CustomSort {
public static void main(String[] args) {
Integer[] arr = {-3, -4, -2, 0, 1, 4, 2, 5};
// 自定义比较器
Comparator<Integer> comparator = new Comparator<Integer>() {
@Override
public int compare(Integer a, Integer b) {
int distanceA = Math.abs(a);
int distanceB = Math.abs(b);
// 先比较到0的距离
if (distanceA != distanceB) {
return distanceA - distanceB;
}
// 如果距离相同,正数优先
if (a >= 0 && b < 0) {
return -1;
} else if (a < 0 && b >= 0) {
return 1;
} else {
return 0;
}
}
};
// 对数组进行排序
Arrays.sort(arr, comparator);
// 打印排序后的数组
System.out.println(Arrays.toString(arr));
}
}
运行这段代码,输出结果将是:
[0, 1, 2, -2, -3, 4, -4, 5]
解释:
Math.abs(a)
和 Math.abs(b)
用于计算整数到0的距离。这样就实现了按照距离0最近来排序,并且整数比负数有更高优先级的要求。