前言

那么这里博主先安利一些干货满满的专栏了!

首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。

高质量干货博客汇总https://blog.csdn.net/yu_cblog/category_12379430.html?spm=1001.2014.3001.5482


在本篇博客之外,博主一起拿还做过一篇九大排序的博客,是常用的排序的汇总,里面对每一种排序都有很详细的解释和代码实现(纯C),博主这里也把链接给大家。

【排序】万字九大排序宝藏汇总 轻松拿下九大排序算法【带动画】 (包含超详细的解释和注释)https://blog.csdn.net/Yu_Cblog/article/details/122848138

基数排序的效率和稳定性

平均时间复杂度 最坏时间复杂度 最好时间复杂度 空间复杂度 稳定性
O(d(n+r)) O(d(n+r)) O(d(n+r)) O(r) 稳定

代码实现

#define _CRT_SECURE_NO_WARNINGS 1

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
//基数排序
/*
* 核心思想:
* 1.分发数据
* 2.回收数据
*/
//这是一个多关键字排序
//按照位数多趟分发回收
#define K 3 //最多3位数
#define RADIX 10 //十个基数
#include<queue> //定义基数
queue<int>Q[RADIX];//这个是队列数组--基数排序要做到先进先出 -- 所以使用队列
//找到key
int GetKey(int value, int k) {
//value:278
//k:0
//代表第一次分发,按照8来排
//所以就把8提取出来就可
int key = 0;
while (k >= 0) {
key = value % 10;
value /= 10;
k--;
}
return key;//比如一个数字时25256 现在按照个位的6来分,key就返回的时6
}
//分发数据
void distribute(int* arr, int left, int right,int k) {
//k代表是第几次分发
for (int i = left; i < right; i++) {//注意这里是左闭右开,所以是<
//根据key分发,key怎么找,用k来找
int key = GetKey(arr[i], k);
Q[key].push(arr[i]);//把arr[i]push到下标为8的队列里面
}
}
void collect(int* arr) {
//不需要区分第几次,只需要把数据回收到数组里面即可
//要检查所有的队列,因为我们不知道哪一些队列有数据哪一些没有
int k = 0;
//arr从0开始重新收集
for (int i = 0; i < RADIX; i++) {
while (!Q[i].empty()) {
//说明这个队列里面有数据
//下面两行其实就是把数据依次放到数组里面去
arr[k++] = Q[i].front();
Q[i].pop();
}
}
}
void _radixSort(int* arr, int left, int right) {
for (int i = 0; i < K; ++i) {//最多循环三次
//有几位数循环几次
//分发数据
distribute(arr, left, right, i);//i代表我现在操作的时哪一位数
//回收数据
collect(arr);
}
}
void radixSort(int* arr, int sz) {
int left = 0;
int right = sz;
//[right,left)
_radixSort(arr, left, right);
}
int main() {
int arr[] = { 278,109,63,930,589,184,505,269,8,83 };
int sz = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < sz; i++) {
cout << arr[i] << " ";
}
cout << endl;
//
radixSort(arr, sz);
//
for (int i = 0; i < sz; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}

基数排序|RadixSort|C++实现的更多相关文章

  1. 基数排序(RadixSort)

    1 基数排序的特点是研究多个关键字key,且多个key之间有权重之分,    或者可把单个key建模为含有多个key的排序 而计数排序.桶排序始终只有个一个key,或者说围绕着一个比较规则 Ex:比较 ...

  2. 排序算法----基数排序(RadixSort(L))单链表智能版本

    转载http://blog.csdn.net/Shayabean_/article/details/44885917博客 先说说基数排序的思想: 基数排序是非比较型的排序算法,其原理是将整数按位数切割 ...

  3. 排序算法----基数排序(RadixSort(L,max))单链表版本

    转载http://blog.csdn.net/Shayabean_/article/details/44885917博客 先说说基数排序的思想: 基数排序是非比较型的排序算法,其原理是将整数按位数切割 ...

  4. 模板化的七种排序算法,适用于T* vector<T>以及list<T>

    最近在写一些数据结构以及算法相关的代码,比如常用排序算法以及具有启发能力的智能算法.为了能够让写下的代码下次还能够被复用,直接将代码编写成类模板成员函数的方式,之所以没有将这种方式改成更方便的函数模板 ...

  5. 6种基础排序算法java源码+图文解析[面试宝典]

    一.概述 作为一个合格的程序员,算法是必备技能,特此总结6大基础算法.java版强烈推荐<算法第四版>非常适合入手,所有算法网上可以找到源码下载. PS:本文讲解算法分三步:1.思想2.图 ...

  6. 20172328 2018-2019《Java软件结构与数据结构》第五周学习总结

    20172328 2018-2019<Java软件结构与数据结构>第五周学习总结 概述 Generalization 本周学习了第九章:排序与查找,主要包括线性查找和二分查找算法和几种排序 ...

  7. Java排序算法总结(转载)

    排序算法 平均时间复杂度 冒泡排序 O(n2) 选择排序 O(n2) 插入排序 O(n2) 希尔排序 O(n1.5) 快速排序 O(N*logN) 归并排序 O(N*logN) 堆排序 O(N*log ...

  8. C语言实现排序

    //C语言版排序#include<stdio.h> #include<stdlib.h> //冒泡排序 void bubleSort(int data[], int n); / ...

  9. 十大基础排序算法[java源码+动静双图解析+性能分析]

    一.概述 作为一个合格的程序员,算法是必备技能,特此总结十大基础排序算法.java版源码实现,强烈推荐<算法第四版>非常适合入手,所有算法网上可以找到源码下载. PS:本文讲解算法分三步: ...

  10. 浅谈后缀数组SA

    这篇博客不打算讲多么详细,网上关于后缀数组的blog比我讲的好多了,这一篇博客我是为自己加深印象写的. 给你们分享了那么多,容我自私一回吧~ 参考资料:这位dalao的blog 一.关于求Suffix ...

随机推荐

  1. vue学习笔记 十四、页面跳转

    系列导航 vue学习笔记 一.环境搭建 vue学习笔记 二.环境搭建+项目创建 vue学习笔记 三.文件和目录结构 vue学习笔记 四.定义组件(组件基本结构) vue学习笔记 五.创建子组件实例 v ...

  2. 深度学习降噪专题课:实现WSPK实时蒙特卡洛降噪算法

    大家好~本课程基于全连接和卷积神经网络,学习LBF等深度学习降噪算法,实现实时路径追踪渲染的降噪 本课程偏向于应用实现,主要介绍深度学习降噪算法的实现思路,演示实现的效果,给出实现的相关代码 线上课程 ...

  3. P5730

    这道题莫名其妙的在本地能过可是洛谷上却0分,把WA的点下载下来之后发现我输出的和他要输出的明明一模一样,说明洛谷的评测有一些问题.我把getchar输入换成cin输入后就AC了,说明洛谷对getcha ...

  4. 每天学五分钟 Liunx 111 | 存储篇:NFS

    NFS NFS(Network File System,网络文件系统),它可以通过网络让不同操作系统,不同机器共享彼此的文件. NFS 分为服务端和客户端.服务端提供共享的文件目录,客户端将该目录挂载 ...

  5. Java 客户端访问kafka

    本文为博主原创,未经允许不得转载: 1. 引入maven依赖 <dependency> <groupId>org.apache.kafka</groupId> &l ...

  6. Angular系列教程之自定义指令

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  7. SV task and function

    内容 system verilog过程语句:自增和自减操作符 逻辑比较操作符 逻辑值为1bit inside语句 变量类型转换 强制类型转换:$cast() 变量位宽转换 变量符号位转换 for循环语 ...

  8. 06-verilog基础语法_5

    How to build and test a module parameter defparam修改参数 Task & function Task Function function不可以调 ...

  9. 【TouchGFX 】使用 CubeMX 创建 TouchGFX 工程时 LCD 死活不显示

    生成的代码死活无法让LCD显示,经两个晚上的分析验证是LTDC_CLK引脚速度设置为低速导致,经测试中速.高速.超高速都正常,真是冤,聊以此以示纪念

  10. 【mysql】 解决 auto_increment 字段 Column count doesn't match value count at row 1

    1, 表结构   man +-------+-------------+------+-----+---------+----------------+| id | int(11) | NO | PR ...