package com.test.sort;
import java.util.Arrays;
/**
* 基数排序基本思想:
* 只适合正整数
* 将待排序序列的元素统一位数,位数较短的补0,然后从低位开始的排序。同一位上值相同的放入一个桶中
* 每位放完,依次抽取每个桶中的元素放入原序列。再对下一位置排序
* 循环次数为序列中最大值的长度
*/
public class RadixSortDemo {
public static void main(String[] args) {
int[] arr=new int[]{11,200,30,41,5,5,3};
radixSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void radixSort(int[] arr){
int maxElement=arr[0];
for(int i=0;i<arr.length;i++){
if(arr[i]>maxElement){
maxElement=arr[i];
}
}
int maxElementSize = String.valueOf(maxElement).length();
int[][] bucket=new int[10][arr.length];
int[] indexArr=new int[10];
for (int j = 0,k = 1; j < maxElementSize; j++,k*=10) {
for(int i=0;i<arr.length;i++){
bucket[arr[i]%(k*10)/k][indexArr[arr[i]%(k*10)/k]++]=arr[i];
}
int index=0;
for (int i = 0; i < indexArr.length; i++) {
int tempIndex=0;
while (indexArr[i]>0){
arr[index++]=bucket[i][tempIndex++];
indexArr[i]--;
}
}
}
}
}
排序算法-基数排序
最新推荐文章于 2024-09-17 16:59:29 发布