所谓桶排序也称基数排序,按位上数字的大小(例如个位数来分桶),桶内进行排序
int[] a = {23,5,32,4,23,256,867,45,3,54,54,766};
public void radixSort(){
int max = 0;
//找到最大的数
for(int i=0;i<a.length;i++){
if(max<a[i]){
max=a[i];
}
}
//根据最大的数判断位数
int times = 0;
while(max >0){
max=max/10;
times++
}
//建立十个队列
List<ArrayList> queues = new ArrayList<>();
for(int i=0;i<10;i++){
ArrayList queue= new ArrayList();
queues.add(queue);
}
//进行times次分配与收集
for(int i=0;i<times;i++){
//分配
for(int j=0;j<a.length;j++){
int x=a[j] %(int)Math.pow(10,i+1) / (int)Math.pow(10,i);
ArrayList queueShare = queues.get(x);
queueShare.add(a[j]);
queues.set(x,queueShare);
}
//收集
int count = 0;
for(int j=0;j<10;j++){
while(queues.get(j).size()>0){
ArrayList<Integer> queueSummary=queues.get(j);
a[count] = queueSummary.get(0);
queueSummary.remove(0);
count++;
}
}
}
}
已经接近尾声了,附上复杂度,并时常复习