基数排序,对数组中各元素分别根据个位、十位、百位……进行桶式排序。
代码实现:
public class RadixSort {
/**
* <p>MethodName:main </p>
* <p>Description:常用排序算法之基数排序 </p>
* <p>@param args</p>
* <p>Return:void </p>
* @author Sunny
* @date 2016-9-27下午4:42:55
*/
public static void main(String[] args) {
int[] arr={7,6,12,235,48,131,1203,2235,34,96};
radixSort(arr,10,4);
}
public static void radixSort(int[] arr,int radix,int distance){
//创建缓冲数组
int length=arr.length;
int[] temp=new int[length];
//创建桶数组
int[] buckets=new int[radix];
//分别根据个位、十位、百位……进行桶式排序
int divide=1;
for(int i=0;i<distance;i++){
//复制数组到缓存数组
System.arraycopy(arr, 0, temp, 0, length);
//桶数组初始化
Arrays.fill(buckets, 0);
//计算元素出现的次数记入桶中
for(int j=0;j<length;j++){
buckets[arr[j]/divide%radix]++;
}
//计算元素在数组中的位置
for(int k=1;k<radix;k++){
buckets[k]=buckets[k]+buckets[k-1];
}
//根据元素在数组中的位置排序
for(int h=length-1;h>=0;h--){
arr[--buckets[temp[h]/divide%radix]]=temp[h];
}
ArrayUtils.printArray(arr);
//改变比较的位数
divide=divide*radix;
}
}
}
过程展示:
131 12 1203 34 235 2235 6 96 7 48
1203 6 7 12 131 34 235 2235 48 96
6 7 12 34 48 96 131 1203 235 2235
6 7 12 34 48 96 131 235 1203 2235