程序分享--排序算法--基数排序

关注我,持续分享逻辑思维&管理思维; 可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;

有意找工作的同学,请参考博主的原创:《面试官心得--面试前应该如何准备》,《面试官心得--面试时如何进行自我介绍》《做好面试准备,迎接2024金三银四》。
推荐热榜内容:《架构实战--以海量存储系统讲解热门话题:分布式概念** 》**

-------------------------------------正文----------------------------------------

基数排序:概述

基数排序(Radix Sort)是桶排序的扩展,它的基本思想是:将整数按位数切割成不同的数字,然后按每个位数分别比较。

排序过程:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。

基数排序:算法描述

1.取得数组中的最大数,并取得位数;

2.arr为原始数组,从最低位开始取每个位组成radix数组;

3.对radix进行计数排序(利用计数排序适用于小范围数的特点);

cpp 复制代码
#include <iostream>
#include <vector>
#include <queue>
 
void radixSort(std::vector<int>& arr)
{
    int maxDigit = 0;
    // 找出数组中最大数的最大位数
    for (int i = 0; i < arr.size(); i++) {
        int temp = arr[i];
        while (temp) {
            temp /= 10;
            maxDigit = maxDigit > (i + 1) ? maxDigit : (i + 1);
        }
    }
 
    std::vector<std::queue<int>> buckets(10); // 建立10个桶
    for (int digit = 0; digit < maxDigit; digit++) {
        // 将数分配到桶中
        for (int i = 0; i < arr.size(); i++) {
            int digitVal = (arr[i] / (int)pow(10, digit)) % 10;
            buckets[digitVal].push(arr[i]);
        }
 
        // 再将桶中的数回收到原数组中
        int index = 0;
        for (int i = 0; i < buckets.size(); i++) {
            while (!buckets[i].empty()) {
                arr[index++] = buckets[i].front();
                buckets[i].pop();
            }
        }
    }
}
 
int main() {
    std::vector<int> arr = {170, 45, 75, 90, 802, 24, 2, 66};
    radixSort(arr);
 
    for (int num : arr) {
        std::cout << num << " ";
    }
 
    return 0;
}
相关推荐
汀、人工智能3 分钟前
[特殊字符] 第2课:字母异位词分组
数据结构·算法·链表·数据库架构··字母异位词分组
小O的算法实验室35 分钟前
2026年SEVC,面向主动成像卫星任务规划问题的群体智能与动态规划混合框架,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
网安INF1 小时前
数据结构第一章复习:基本概念与算法复杂度分析
数据结构·算法
幻风_huanfeng1 小时前
人工智能之数学基础:什么是凸优化问题?
人工智能·算法·机器学习·凸优化
三雷科技1 小时前
使用 `dlopen` 动态加载 `.so` 文件
开发语言·c++·算法
Yzzz-F2 小时前
Problem - 2146D1 - Codeforces &&Problem - D2 - Codeforces
算法
Kk.08022 小时前
力扣 LCR 084.全排列||
算法·leetcode·职场和发展
环黄金线HHJX.2 小时前
龙虾钳足启发的AI集群语言交互新范式
开发语言·人工智能·算法·编辑器·交互
Omics Pro2 小时前
虚拟细胞:开启HIV/AIDS治疗新纪元的关键?
大数据·数据库·人工智能·深度学习·算法·机器学习·计算机视觉
旖-旎2 小时前
分治(快速选择算法)(3)
c++·算法·leetcode·排序算法·快速选择