package com.interview.algorithms.sort; /** * Two strings * Created_By: zouzhile * Date: 11/1/14 * Time: 3:49 PM */ public class AnagramSort { public void sort(String[] array) { String[] anagramArray = new String[array.length]; for(int i = 0; i < array.length; i ++) { anagramArray[i] = this.getBaseAnagram(array[i]); } this.sort(array, anagramArray, 0, array.length - 1); } private void sort(String[] array, String[] anagrams, int begin, int end) { if(begin <= end) { int pivot = begin - 1; String value = anagrams[end]; for(int i = begin; i <= end; i ++) { if(anagrams[i].compareTo(value) <= 0) { pivot ++; this.switchElements(array, pivot, i); this.switchElements(anagrams, pivot, i); } } this.sort(array, anagrams, begin, pivot-1); this.sort(array, anagrams, pivot + 1, end); } } private void switchElements(String[] array, int i, int j){ String temp = array[i]; array[i] = array[j]; array[j] = temp; } private String getBaseAnagram(String s) { int[] counters = new int[256]; for(char c : s.toCharArray()) counters[c] += 1; String anagram = ""; for(int i =0; i < counters.length; i ++) while(counters[i] > 0) { anagram += (char) i; counters[i] --; } return anagram; } public static void main(String[] args) { String[] array = new String[]{"yoshi", "eat", "shyoi", "army", "tea", "yshio", "aett", "mary", "yarm", "abc", "bac","ttae"}; AnagramSort sorter = new AnagramSort(); sorter.sort(array); String dump = ""; for(String s : array) dump += s + " "; System.out.println(dump); } }