package com.interview.basics.sort; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Created with IntelliJ IDEA. * User: stefanie * Date: 8/28/14 * Time: 11:18 AM */ public class RadixSorter<T extends Comparable<T>> extends Sorter<T>{ private Map<Character, List<Integer>> bucket = new HashMap<Character, List<Integer>>(); private Map<T, String> map = new HashMap<T, String>(); @Override public T[] sort(T[] input) { int loop = 0; for(int i = 0; i < input.length; i++){ String str = input[i].toString(); map.put(input[i], str); if(str.length() > loop) loop = str.length(); } T[] temp = input; int index = 0; while(index < loop){ bucket.clear(); for(int i = 0; i < temp.length; i++){ String str = map.get(temp[i]); Character ch = index < str.length()? str.charAt(str.length() - index - 1):'0'; List<Integer> list = bucket.get(ch); if(list == null){ list = new ArrayList<>(); bucket.put(ch, list); } list.add(i); } int k = 0; T[] aux = (T[]) new Comparable[input.length]; for(Character ch = '0'; ch <= '9'; ch++){ List<Integer> list = bucket.get(ch); if(list != null){ for(Integer j : list) aux[k++] = temp[j]; } } temp = aux; index++; } for(int i = 0; i < input.length; i++) input[i] = temp[i]; return input; } }