如何按第一位数字的降序对整数数组进行排序? [关闭]
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 Stream
s 的更优雅的解决方案(请注意,此解决方案返回一个新的排序数组,而不是修改原始数组):
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
【讨论】:
以上是关于如何按第一位数字的降序对整数数组进行排序? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章