首页 > 编程语言 > 详细

基数排序板子

时间:2021-01-11 23:03:00      阅读:32      评论:0      收藏:0      [点我收藏+]

复杂度O(N)的整数排序

class Solution {
public:
    void radixSort(vector<int>& nums) {
        int n = nums.size();
        int exp = 1;
        vector<int> buf(n);
        int mx = *max_element(nums.begin(), nums.end());
        while(exp <= mx) {
            vector<int> cnt(10); //十进制10位
            for(int i = 0; i < n; i++) { 
                int d = (nums[i] / exp) % 10; //exp位的数字
                cnt[d]++;
            }
            for(int i = 1; i < 10; i++) {
                cnt[i] += cnt[i - 1];
            }
            for(int i = n - 1; i >= 0; i--) {
                int d = (nums[i] / exp) % 10;
                buf[cnt[d] - 1] = nums[i];
                cnt[d]--;
            }
            copy(buf.begin(), buf.end(), nums.begin());
            exp *= 10;
        }
        return;
    }
};

基数排序板子

原文:https://www.cnblogs.com/wrjlinkkkkkk/p/14264714.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!