排序之基数排序

package test;
import java.util.ArrayList;
public class Main{
    public static void RadixSort(int[] nums){
        int max=nums[0];
        for(int i=0;i<nums.length;i++){
            max=Math.max(max,nums[i]);
        }
        //建立十个桶
        ArrayList<Integer>[] buckets=new ArrayList[10];
        for(int i=0;i<10;i++){
            buckets[i]=new ArrayList<>();
        }
        int k=getNum(max);
        int start=0;
        //循环遍历每个数字的每一位,从各位到十位
        while(start<=k){
            for(int i=0;i<nums.length;i++){
                int num=getValueOfK(nums[i],start);
                buckets[num].add(nums[i]);
            }
            int index=0;
            for(int i=0;i<10;i++){
                for(int j=0;j<buckets[i].size();j++){
                    nums[index++]=buckets[i].get(j);
                }
                //每次统计完把桶清空
                buckets[i].clear();
            }
            start++;
        }
    }
    //找到某个数的第k位
    private static int getValueOfK(int num, int k) {
        while(k>1){
            num=num/10;
            k--;
        }
        return num%10;
    }
    //计算最大数的位数
    private static int getNum(int max) {
        int count=0;
        while(max>0){
            max=max/10;
            count++;
        }
        return count;
    }
    public static void main(String[] args){
        int[] arr = {10,7,2,4,7,62,3,4,2,1,8,9,19,100,2223};
        RadixSort(arr);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务