putting this in a 'real' java programming context (i.e. we use some existing and basic jdk util classes, i think the following approach may give another interesting aspect to this topic (i.e. "how to sort an array of strings with anagrams next to each other"):
(a) we define a comparator to tell if two strings are anagrams;
(b) we use Arrays.sort(array, comparator) to sort the array;
below is the code and result (the idea can be seen in chapter 9, "cracking the coding interview" by Gayle Laakmann, for example)
import java.util.Arrays;
import java.util.Comparator;
public class SolutionForSortArraysByAnagrams {
public static void main(String[] args){
String[] strArray = new String[]{"abets","mates","baste","meats", "betas","beast", "steam", "tames", "beats", "teams"};
sortArraysByAnagrams(strArray);
for(String str : strArray){
System.out.println(str);
}
}
private static void sortArraysByAnagrams(String[] strArray) {
Arrays.sort(strArray, new AnagramComparator());
}
}
class AnagramComparator implements Comparator<String> {
@Override
public int compare(String s1, String s2) {
//check edge conditions and length
if( s1 == null || s2 == null)
return -1;
if( s1.length() < s2.length())
return -1;
else if ( s1.length() > s2.length())
return 1;
//sort s1 and s2 to compare:
//System.out.println(s1 + " vs " + s2);
return sort(s1).compareTo(sort(s2));
}
private String sort(String s1) {
char[] cArray = s1.toCharArray();
Arrays.sort(cArray);
//System.out.println(" sorted: " + new String(cArray));
return new String(cArray);
}
}
input: {"abets","mates","baste","meats", "betas","beast", "steam", "tames", "beats", "teams"};
output:
abets
baste
betas
beast
beats
mates
meats
steam
tames
teams