这个算法是对两位数进行排序,即:3,5,11,14,42,23,21....(其他位数可以自己扩展,其中QuequeI就是队列).是一个非常有意思的算法.
private final int ONES = 1; //个位
public void baseCompositor(int[] reData) throws QuequeException{
QuequeI[] q = new QuequeI[10];
for(int i=0;i<10;i++)
q[i] = new QuequeI(10);
distribute(reData,q,ONES);
collect(reData,q);
print(reData);
System.out.println("=====================");
distribute(reData,q,2);//十位
collect(reData,q);
print(reData);
}
//distribute data to queque
public void distribute(int[] reData,QuequeI[] q,int kind) throws QuequeException{
int i = 0;
if(kind == ONES) {
while(i<reData.length){
q[reData[i]%10].insert(reData[i]);
i++;
}
} else{
while(i<reData.length){
q[reData[i]/10].insert(reData[i]);
i++;
}
}
}
//collect data in queque to array
public void collect(int[] reData,QuequeI[] q) throws QuequeException{
int temp = 0;
for(int i=0;i<10;i++){
while(!q[i].isEmpty()){
reData[temp++] = q[i].delete();
}
}
}
//print data in array
public void print(int[] reData){
for(int i=0;i<reData.length;i++)
System.out.print(reData[i]+" ");
System.out.println();
}
private final int ONES = 1; //个位
public void baseCompositor(int[] reData) throws QuequeException{
QuequeI[] q = new QuequeI[10];
for(int i=0;i<10;i++)
q[i] = new QuequeI(10);
distribute(reData,q,ONES);
collect(reData,q);
print(reData);
System.out.println("=====================");
distribute(reData,q,2);//十位
collect(reData,q);
print(reData);
}
//distribute data to queque
public void distribute(int[] reData,QuequeI[] q,int kind) throws QuequeException{
int i = 0;
if(kind == ONES) {
while(i<reData.length){
q[reData[i]%10].insert(reData[i]);
i++;
}
} else{
while(i<reData.length){
q[reData[i]/10].insert(reData[i]);
i++;
}
}
}
//collect data in queque to array
public void collect(int[] reData,QuequeI[] q) throws QuequeException{
int temp = 0;
for(int i=0;i<10;i++){
while(!q[i].isEmpty()){
reData[temp++] = q[i].delete();
}
}
}
//print data in array
public void print(int[] reData){
for(int i=0;i<reData.length;i++)
System.out.print(reData[i]+" ");
System.out.println();
}