0
点赞
收藏
分享

微信扫一扫

图解基数排序,Java,C++代码

hoohack 2022-04-30 阅读 41

通俗理解

图码结合解释基数排序

排序过程

个位数排序

十位数排序

Java代码基数排序

public static void radixSort(int[] nums) {
    long base = 1;

    int[] out = new int[nums.length];
    int maxValue = Arrays.stream(nums).max().getAsInt();

    while(maxValue >= base) {
        int[] bucket = new int[10];
        for(int i = 0; i < nums.length; i++) {
            int digit = (nums[i] / (int)base) % 10;
            bucket[digit]++;
        }
        for(int i = 1; i < 10; i++) {
            bucket[i] += bucket[i - 1];
        }
        for(int i = nums.length - 1; i >= 0; i--) {
            int digit = (nums[i] / (int)base) % 10;
            out[bucket[digit] - 1] = nums[i];
            bucket[digit]--;
        }
        
        System.arraycopy(out,0,nums,0,nums.length);
        base *= 10;
   }
}

C++代码基数排序

class Sort {
public:
    int radixSort(vector<int>& nums) {
        int n = nums.size();
        int base = 1;
        vector<int> out(n);
        int maxValue = *max_element(nums.begin(),nums.end());
        
        while(maxValue >= base) {
            vector<int> bucket(10);
            for(int i = 0; i < n; i++) {
                int digit = (nums[i] / base) % 10;
                bucket[digit]++;
            }
            for(int i = 1; i < 10; i++) {
                bucket[i] += bucket[i - 1];
            }
            for(int i = n - 1; i >= 0; i--) {
                int digit = (nums[i] / base) % 10;
                out[bucket[digit] - 1] = nums[i];
                bucket[digit]--;
            }
            copy(out.begin(),out.end(),nums.begin());
            base *= 10;
        }
        
        return 0;
    }
}
举报

相关推荐

0 条评论