当前位置: 首页 > news >正文

【C/C++ 06】基数排序

基数排序是桶排序的一种,算法思路为:

  1. 利用队列进行数据收发
  2. 创建一个队列数组,数组大小为10,每个元素都是一个队列,存储取模为1~9的数
  3. 从低位到高位进行数据收发,完成排序
  4. 适用于数据位不高的情况(若不知道数据集的最大位数,则只能往大了猜,降低效率)

基数排序是不稳定排序算法,时间复杂度为O(K*n),K为数据最大位数,也可表示为O(n)

虽然基数排序有着非常优秀的效率,甚至比快排还快,但是由于算法受限于数据的位数,因此并不常见。

代码示例,假设测试数据数组元素最大位数为3:

#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>
#include <queue>
using namespace std;// 数据最大位数
#define K 3		// 取模的类别数(桶数、基数)
#define RADIX 10// 桶
queue<int> _q[RADIX];// 获取val值对应桶的位置,即哈希映射
int GetPos(int a, int k)
{int pos = a % RADIX;while (k--){a /= RADIX;pos = a % RADIX;}return pos;
} // 分发数据,将数组数据按模分发到哈希桶上
void Distribute(int* arr, int left, int right, int k)
{for (int i = left; i < right; ++i){int pos = GetPos(arr[i], k);_q[pos].push(arr[i]);}
} // 收集数据,根据队列的特性从哈希桶上收集数据,存入数组
void Collect(int* arr)
{int pos = 0;for (int i = 0; i < RADIX; ++i){while (!_q[i].empty()){arr[pos++] = _q[i].front();_q[i].pop();}}
} void RadixSort(int* arr, int n)
{int k = 0;while (k < K){Distribute(arr, 0, n, k++);Collect(arr);}
} /*----------测试模块---------- */// 打印数组
void PrintArr(int* arr, int n)
{for (int i = 0; i < n; ++i){printf("%4d", arr[i]);} cout << endl;
} void TestRadixSort()
{cout << "基数排序:";int arr[20] = {112, 23, 5, 17, 129, 0, 211, 4, 61, 8,511, 51, 25, 10, 210, 111, 3, 5, 18, 6};RadixSort(arr, 20);PrintArr(arr, 20);
} int main()
{TestRadixSort();return 0;
}

运行结果:

http://www.lryc.cn/news/290574.html

相关文章:

  • Flume1.9基础学习
  • ThinkPHP6的助手函数汇总
  • ·备忘录模式
  • docker-学习-2
  • 树--二叉树(C语言纯手凹)
  • TypeScript(七) 函数
  • 学fpga和还是嵌入式?
  • Day01-变量和数据类型课后练习-参考答案
  • Docker 数据管理、容器互联、网络与资源控制
  • 密码加密——MD5与BCryptPasswordEncoder
  • 利用外卖系统源码构建高效的在线订餐平台
  • 数据分析数据 -(用数据讲故事)
  • 如何运用5W2H分析法分析自己适合哪种办公室
  • 为什么考虑电子采购而非传统采购?
  • 【git】git update-index --assume-unchanged(不改动.gitignore实现忽略文件)
  • 科普类——无压缩图像传输带宽的计算(七)
  • 云原生周刊:K8s 1.26 到 1.29 版本的更新 | 2024.1.29
  • 手机壳也能散热了?
  • 《微信小程序开发从入门到实战》学习九十七
  • 二极管漏电流对单片机ad采样偏差的影响
  • 三、防御保护---防火墙安全策略篇
  • 【学网攻】 第(15)节 -- 标准ACL访问控制列表
  • 【图像分割】【深度学习】Windows10下UNet代码Pytorch实现与源码讲解
  • MySQL十部曲之一:MySQL概述及手册说明
  • node.js基础--01
  • 基于GPT3.5逆向 和 本地Bert-Vits2-2.3 的语音智能助手
  • java stream简介
  • 机电制造ERP软件有哪些品牌?哪家的机电制造ERP系统比较好
  • 分布式ID(4):雪花算法生成ID之Leaf(美团点评分布式ID生成系统)
  • 翻译: GPT-4 Vision征服LLM幻觉hallucinations 升级Streamlit六