一、思想
此類字符串排序可以通過鍵索引計數法來完成;如果字符串長度均為W,那就從右向左以每個位置的字符作為鍵,用鍵索引方法將字符串排序W遍;
二、代碼
/** * 低位優先的字符串排序 * * @author pengcx * */ public class LSD { /** * 將字符串數組a中的字符串,按低W位優先字符串排序 * * @param a * 字符串數組a * @param W * 第W位 */ public static void sort(String[] a, int W) { // 通過前W個字符將a[]排序 int N = a.length; int R = 256; String aux[] = new String[N]; // 根據從右到左,第d個字符用鍵索引計數法排序W遍 for (int d = W - 1; d >= 0; d--) { // 第一步,計算出現的頻率 int[] count = new int[R + 1]; for (int i = 0; i < N; i++) { count[a[i].charAt(d) + 1]++; } // 第二步,將頻率轉換成索引 for (int r = 0; r < R; r++) { count[r + 1] += count[r]; } // 第三步,將元素匪類 for (int i = 0; i < N; i++) { aux[count[a[i].charAt(d)]++] = a[i]; } // 第四步,回寫 for (int i = 0; i < N; i++) { a[i] = aux[i]; } } } public static void main(String[] args) { String[] a = { "abda", "sdfa", "qweg", "ndpl", "lkiu", "sdud" }; int N = a.length; int W = a[0].length(); sort(a, W); for (int i = 0; i < N; i++) { System.out.println(a[i]); } } }