如何按第一位数字的降序对整数数组进行排序? [关闭]

Posted

技术标签:

【中文标题】如何按第一位数字的降序对整数数组进行排序? [关闭]【英文标题】:How to sort an array of integers in descending order of the first digit? [closed] 【发布时间】:2014-10-14 04:22:18 【问题描述】:

如何在 Java 中对整数列表进行排序以产生以下输出?

输入:[7,8,32,97,27,2]

输出:[97,8,7,32,27,2]

所需的顺序:

首先,数字应按第一个数字的降序排列,然后按第二个数字的降序排列,依此类推...

【问题讨论】:

你好吗?你回答了什么? 我认为您需要更好地指定算法,但您似乎想按字符反向排序 【参考方案1】:

您需要的排序是按字典顺序降序。

如果您将输入列表的数字视为字符串并按降序对它们进行排序,您将得到的顺序是按字典顺序排列的顺序。如果所有整数的位数相同,则字典顺序将与整数的自然排序相同。

但是,对于不同位数的整数,顺序是不同的。

例如,[10,9,8,7,6,5,4,3,2,1] 将按字典顺序降序排列为[9,8,7,6,5,4,3,2,10,1]

因此我的实现:

    int 数组转换为String 数组。 使用Arrays.sort() 将数组按照Comparable 自然排序(对于String,按字典顺序比较两个字符串)进行升序排序。 转换回int 数组,颠倒顺序(得到降序)。

实施:

public static void lexSort (int[] array)

  String[] sarr = new String[array.length];
  // convent the array to a String array
  for (int i = 0; i < sarr.length; i++) 
    sarr[i] = Integer.toString (array[i]);
  
  // sort the String array (descending lexicographical order)
  Arrays.sort (sarr);
  // assign the sorted String array back to the input int array in reverse order
  for (int i = 0; i < sarr.length; i++) 
    array[i] = Integer.parseInt (sarr[sarr.length-1-i]);
  

测试:

int[] input = 7,8,32,97,27,2;
System.out.println ("before: " + Arrays.toString (input));
lexSort(input);
System.out.println ("after: " + Arrays.toString (input));

输出:

before: [7, 8, 32, 97, 27, 2]
after: [97, 8, 7, 32, 27, 2]

使用 Java 8 Streams 的更优雅的解决方案(请注意,此解决方案返回一个新的排序数组,而不是修改原始数组):

public static int[] lexSort (int[] array)

  return IntStream.of (array)
                  .mapToObj (Integer::toString) // convert the integers to Strings
                  .sorted (Comparator.reverseOrder ()) // sort in reversed lexicographical 
                                                       // order
                  .mapToInt (Integer::parseInt) // convert the sorted Strings back to 
                                                // integers
                  .toArray (); // output the sorted stream to an array

【讨论】:

以上是关于如何按第一位数字的降序对整数数组进行排序? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

按 C 中元素出现频率的降序对数组进行排序

c_cpp 按设置位的降序对数组进行排序

按降序对对象数组进行排序[关闭]

按特定键的降序对字典列表进行排序[重复]

按升序或降序对数字或字母进行通用排序

GBQ中的窗口函数按顺序排序行为规范