導入Java . util . iterator;
公共類比較{
Public void計數排序(string [] a,char [] b,int k){//計數排序。
String[] temp =新字符串[a . length+1];
int[]c = new int[k+1];
int i,j;
for(I = 0;我& lt= k;i++)
c[I]= 0;
for(j = 0;j & ltb .長度;j++) {
c[B[j]-' a ']= c[B[j]-' a ']+1;
}
for(I = 1;我& lt= k;i++)
c[I]= c[I]+c[I-1];
for(j = a . length-1;j & gt= 0;j - ) {
temp[c[B[j]-' A ']]= A[j];
c[B[j]-' a ']= c[B[j]-' a ']-1;
}
for(I = 1;我& lt= A .長度;i++) {
a[I-1]= temp[I];
}
}
public void radixSort(String[] A,int d) {
ArrayList[]arr = new ArrayList[26];
countingSort(A,divide(A,d),max(divide(A,d))-' A ');
for(int I = 0;我& lta .長度;i++) {
int temp = A[i]。charAt(d-1)-' a ';
if(arr[temp] == null)
arr[temp]= new ArrayList();
arr[臨時]。添加(A[I]);
}
for(int j = 0;j & lt26;J++) {//插入並排序每個桶。
if(arr[j]!= null) {
insert(arr[j]);
}
}
//合並每個桶的結果。
int count = 0;
for(int I = 0;我& lt26;i++) {
if(arr[i]!= null) {
叠代器it = arr[i]。叠代器();
while(it.hasNext()) {
String temp =(String)it . next();
a[count]= temp;
count++;
}
}
}
}
public void Insert(ArrayList list){//Insert sort。
if(list . size()& gt;1) {
for(int I = 1;我& ltlist . size();i++) {
if(compare to((String)list . get(I),(String)list . get(I-1))& lt;0) {
String temp =(String)list . get(I);
int j = I-1;
for(;j & gt= 0 & amp& ampcompareTo(temp,(String)list . get(j))& lt;0;j -)
list.set(j + 1,list . get(j));
list.set(j + 1,temp);
}
}
}
}
Int compareto (string a,string b){//比較兩個字符串的大小。
返回a . compare to(b);
}
Public char [] divide (string [] a,int count){//取數組中每個字符串的d個字符。
char[]B = new char[a . length];
for(int I = 0;我& lta .長度;i++) {
B[i] = A[i]。charAt(count-1);
}
返回B;
}
Public char max(char[] B) {//查找數組中的最大值。
char max = ' a
for(int I = 0;我& ltb .長度;i++) {
if(B[I]& gt;max)max = B[I];
}
返回max
}
公共靜態void main(String[] args) {
CompareString cs = new CompareString();
String[] A = {“蘋果”、“妳好”、“親愛的”、“晴”、“日”、“開心”};
cs.radixSort(A,1);
for(int I = 0;我& lta .長度;i++)
system . out . print(A[I]+" ");
}
}