首页 > 代码库 > 貌似基数排序
貌似基数排序
如给定数组{1,3,51,5,512,671,9,67},设计程序,输出{9,671,67,512,51,5,3,1}
基本思想是给每一位数字定权重,然后使用如W[671] = 6 * w1 + 7 * w2 + 1 * w3;W的个数由数组中位数最长的数字决定。由数组中数字对应的权值来排序即可
程序如下:
1 import java.util.*; 2 import java.math.*; 3 public class Hello { 4 public static List<Integer> sort(int[] arr) 5 { 6 String[] strs = new String[arr.length]; 7 int curLen = 0, maxLen = 0; 8 for(int i = 0; i < strs.length; i++) 9 {10 strs[i] = String.valueOf(arr[i]);11 curLen = strs[i].length();12 if(curLen > maxLen)13 maxLen = curLen;14 }15 HashMap<String,Integer> hm = new HashMap<String,Integer>();16 for(int i = 0; i < strs.length; i++)17 {18 hm.put(strs[i],0);19 for(int j = 0; j < strs[i].length(); j++)20 {21 hm.put(strs[i],hm.get(strs[i]) + (strs[i].charAt(j) - ‘0‘)*(int)Math.pow(10,maxLen - j));22 }23 }24 List<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>();25 list.addAll(hm.entrySet());26 ValueComparator vc = new ValueComparator();27 Collections.sort(list,vc);28 List<Integer> intList = new ArrayList<Integer>();29 for(Iterator<Map.Entry<String,Integer>> it = list.iterator();it.hasNext();)30 {31 intList.add(Integer.valueOf(it.next().getKey())); 32 }33 34 return intList;35 }36 37 public static void main(String[] args) {38 int[] arr = {11,1,12,23,24,22,456,467,567};39 List<Integer> a =sort(arr);40 System.out.println(a);41 }42 }43 44 class ValueComparator implements Comparator<Map.Entry<String,Integer>>45 {46 public int compare(Map.Entry<String,Integer> mp1,Map.Entry<String,Integer> mp2)47 {48 return mp2.getValue() - mp1.getValue();49 }50 }
貌似基数排序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。