貌似基数排序

如给定数组{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 }

 

posted @ 2014-11-18 21:51  idealing  阅读(210)  评论(0编辑  收藏  举报