Java算法:按距离0最近排序,整数优先于负数

ChatGPT4o 使用 ChatGPT 4o 回答

问题:

帮我实现一个java算法题,给定一个数组,里面包含若干个正负的整数,举例有 -3,-4, -2, 0, 1, 4, 2, 5。排序结果为 0, 1, 2, -2, -3, 4, -4, 5。即按照距离0最近来排序,整数比负数有更高优先级。

回答:

要实现这个排序算法,我们可以使用自定义的比较器来对数组进行排序。Java 提供了 Arrays.sort 方法,可以接受一个比较器来定义排序规则。我们可以根据题目要求来实现这个比较器。

具体步骤如下:

  1. 定义一个比较器,比较两个整数时,首先比较它们到0的距离。
  2. 如果两个整数到0的距离相同,则优先比较正数和负数,正数优先。
  3. 使用 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]

解释:

  1. Math.abs(a)Math.abs(b) 用于计算整数到0的距离。
  2. 如果两个整数到0的距离不同,则按距离从小到大排序。
  3. 如果两个整数到0的距离相同,则正数优先。

这样就实现了按照距离0最近来排序,并且整数比负数有更高优先级的要求。