it-swarm.cn

按降序对int数组进行排序

可能重复:
按降序排列原始类型的数组
Java:如何以相反顺序对浮点数组进行排序?
如何在Java中反转int数组?

以下代码将以升序顺序对数组进行排序:

int a[] = {30,7,9,20};
Arrays.sort(a);
System.out.println(Arrays.toString(a));

我需要按降序顺序对其进行排序。如何使用比较器执行此操作?

请帮忙。

29
android

对于原始数组类型,您必须编写一个反向排序算法:

或者,您可以将_int[]_转换为_Integer[]_并编写比较器:

_public class IntegerComparator implements Comparator<Integer> {

    @Override
    public int compare(Integer o1, Integer o2) {
        return o2.compareTo(o1);
    }
}
_

或使用Collections.reverseOrder(),因为它仅适用于非原始数组类型。

最后,

_Integer[] a2 = convertPrimitiveArrayToBoxableTypeArray(a1);
Arrays.sort(a2, new IntegerComparator()); // OR
// Arrays.sort(a2, Collections.reverseOrder());

//Unbox the array to primitive type
a1 = convertBoxableTypeArrayToPrimitiveTypeArray(a2);
_
17
Buhake Sindi
    Comparator<Integer> comparator = new Comparator<Integer>() {

        @Override
        public int compare(Integer o1, Integer o2) {
            return o2.compareTo(o1);
        }
    };

    // option 1
    Integer[] array = new Integer[] { 1, 24, 4, 4, 345 };
    Arrays.sort(array, comparator);

    // option 2
    int[] array2 = new int[] { 1, 24, 4, 4, 345 };
    List<Integer>list = Ints.asList(array2);
    Collections.sort(list, comparator);
    array2 = Ints.toArray(list);
6
John B

Guava 有一种方法 _Ints.asList() 用于创建List<Integer>后加int[]数组。您可以将其与Collections.sort一起使用,以将Comparator应用于基础数组。

List<Integer> integersList = Ints.asList(arr);
Collections.sort(integersList, Collections.reverseOrder());

请注意,后者是由实际数组支持的活动列表,因此它应该非常有效。

5
Sean Patrick Floyd

如果不是大数组或长数组,只需对其进行镜像:

for( int i = 0; i < arr.length/2; ++i ) 
{ 
  temp = arr[i]; 
  arr[i] = arr[arr.length - i - 1]; 
  arr[arr.length - i - 1] = temp; 
}
5
Matjaz Muhic