算法思想:对于纯整形数据,将整数按位数切割成不同的数字,然后按每个位数的值依次分别归类,假定该序列最大长度的数 为n位 ,那么经历n次归类以后该序列将呈现有序。
不多说了,直接上代码:
package Sort; import java.util.ArrayList; import java.util.HashMap; import java.util.Map.Entry; public class KeyWordSort { // 关键字桶 HashMap<Integer, ArrayList<Integer>> bucket = new HashMap<Integer, ArrayList<Integer>>(); public static void main(String[] args) { int[] a = new int[] { 20, 30, 90, 40, 70, 110, 60, 10, 100, 50, 80, 1, 2 };// 待排序列 KeyWordSort keyWordSort = new KeyWordSort(); keyWordSort.sort(a); for (int t : a) { System.out.println(t); } } public void sort(int[] datas) { initbucket(); // 初始化桶 for (int d = 1; d <= 3; d++) { for (int i = 0; i < datas.length; i++) { int key = GetKey(datas[i], d);// 得到关键字 inputbucket(datas[i], key);// 将值,关键字 放入桶中 } Integer[] res = outputbucket();// 完成一轮排序 for (int j = 0; j < datas.length; j++) { datas[j] = res[j];// 将排序结果写回 } initbucket();// 重置桶 } } private void inputbucket(int value, int key) { bucket.get(key).add(value); } private Integer[] outputbucket() { ArrayList<Integer> bArrayList = new ArrayList<Integer>(); for (Entry<Integer, ArrayList<Integer>> entry : bucket.entrySet()) { for (int i : entry.getValue()) { bArrayList.add(i); } } Integer[] a = new Integer[bArrayList.size()]; return bArrayList.toArray(a); } private void initbucket() { for (int i = 0; i <= 9; i++) { bucket.remove(i); bucket.put(i, new ArrayList<Integer>()); } } private int GetKey(int value, int d)// d默认是1 即从个位开始 { int t = value; while (d > 0) { t = value % 10;// 得到最右边的数 value = value / 10; d--; } return t; } }