Java 使用比较器的基元数组排序

Java 使用比较器的基元数组排序,java,arrays,sorting,comparator,Java,Arrays,Sorting,Comparator,我正在解决以下问题,并试图找到更好、更干净的排序方法 问题 1.我刚刚意识到Arrays.sort(arr,Comparator)不能与int[]arr一起工作。我需要转换为Integer[]来进行排序。有没有其他方法可以直接对int[]进行排序? 2.有没有更好的方法来编写这个程序 参考: 绝对值排序 给定一个整数数组arr,编写一个函数absSort(arr),该函数根据arr中数字的绝对值对数组进行排序。如果两个数字具有相同的绝对值,则根据符号对它们进行排序,其中负数位于正数之前 示例:

我正在解决以下问题,并试图找到更好、更干净的排序方法

问题 1.我刚刚意识到Arrays.sort(arr,Comparator)不能与int[]arr一起工作。我需要转换为Integer[]来进行排序。有没有其他方法可以直接对int[]进行排序? 2.有没有更好的方法来编写这个程序

参考:

绝对值排序 给定一个整数数组arr,编写一个函数absSort(arr),该函数根据arr中数字的绝对值对数组进行排序。如果两个数字具有相同的绝对值,则根据符号对它们进行排序,其中负数位于正数之前

示例:

输入:arr=[2,-7,-2,-2,0] 输出:[0,-2,-2,2,-7]

我的解决方案

static int[] absSortArray(int[] arr) {

        Integer[] input = new Integer[arr.length];
        for (int i=0; i < input.length; i++) {
            input[i] = arr[i];
        }

        Arrays.sort(input, (a, b) -> ((Math.abs(a) == Math.abs(b)) ? ((a < b) ? -1 : 1) : (Math.abs(a) < Math.abs(b)) ? -1 : 1));

        int[] output =  new int[input.length];
        for (int i=0; i < input.length; i++) {
            output[i] = input[i];
        }

        return output;
    }

static int[]absortarray(int[]arr){
整数[]输入=新整数[arr.length];
for(int i=0;i((Math.abs(a)=Math.abs(b))?((a
您可以编写自己的数组排序。一种很好的方法是将原始数组看作是n个排序列表的1,因此将其复制到如下排序的新数组:将前两个列表合并为2个排序列表,将第二个列表合并为2个排序列表,将这些列表合并为4个排序列表,重复4个新列表,合并到8个排序列表中;等等。您可以使用当前元素计数中的零位来告诉您何时合并多少。它的优点是对多级缓存、RAM和VM非常友好,因为它首先处理小集合,每次传递时集合大小加倍,恢复到最近的递增年龄值

另一个常用方法是将数据移动到有序列表中:tree、trie、skip list。甚至C也有一棵树:tsearch()。如果可用的工具需要对象或结构,请制作一个简单的对象或结构。有时,当存在数据解决方案时,人们会寻找代码解决方案。如果输入的到达是渐进的,这种排序在每次添加时都会发生,并且在添加最后一项时就准备好输出,那么这一点尤其好

对于小列表,插入排序或冒泡排序n^2/2没有问题

如果值不是唯一的,则带有value和count的类/结构将使它们唯一且更紧凑