代码段

//基数排序:首先在一个新的count数组里把所有数赋值为0,
//我们可以理解把需要排序的数组a[]里不同的数,
//分别求出他们的个,十,百,千位...这些称为基位,
//然后把这些个位,十位,百位的数字(从0到9)分别存储在一个新的数组count[]
//咱们先看个位,先不要理会十位,百位
//把这堆数组的个位按顺序从0--9分别依次遍历存储在count[0]---count[9]里,
//就是出现一次就 count[tmpNum]++;
//如果有多个重复个位,比如说出现了2次3的个位,就是count[2]从0加1再加1变成 count[2]=2;
//遍历完一次后,全部的个位数都存储在这个数组count里了
//然后进行下一个操作,你先不要觉得奇怪,听我解释
//就是把第一位的count[0]的值加上第二位count[1]的值赋给countt[1];
//然后把第二位的count[1]的值加上第三位count[2]的值赋给countt[2];
//依此类推直到count[9],这样做的目的是为了
//便于计数,从count[0]累加到count[9],在输出使用的时候相同位数能够逆序相邻排序 //以后每使用一次,(result[--count[tmpNum]] = a[j];)个位的数量就减少1,
//并且在result数组中位置还会往前挪动一位
// 如果没看懂这里,可以看我下面的图片分析,跟着我的过程推一编
#include<iostream>
#include<math.h>
#include<string.h>
using namespace std;void RadixSort(int a[], int Asize)
{int count[10];//计数器,从0到9 int result[Asize]; //Asize为最大基数为,比如最大数在0-9 是 1,最大数在10-99 是2 //最大数在 100-999 是3 ,以此类推 for(int i = 0; i < 2; ++i){int division = pow(10, i); //除数,为了得到个位上的数,十位上的数,百位上的数 for(int j = 0; j < Asize; ++j)//计数器全部填充为0 {count[j] = 0;}for(int j = 0; j < Asize; ++j)//提取位数存在计数器数组里 {int tmpNum = a[j] / division % 10;count[tmpNum]++;}for(int j = 1; j < 10; ++j){count[j] = count[j] + count[j-1]; //就是把第一位的count[0]的值加上第二位count[1]的值赋给countt[1];//然后把第二位的count[1]的值加上第三位count[2]的值赋给countt[2];}for(int j = Asize - 1; j >= 0; j--){int tmpNum = a[j] / division % 10;result[--count[tmpNum]] = a[j];//很巧妙的算法设计 }for(int j = 0; j < Asize; ++j){a[j] = result[j];//赋值回原来的数组 }}
}
int main()
{int a[10] = {9, 8, 7, 6, 5, 10, 11, 28, 33, 1};RadixSort(a, 10);for(int i = 0; i < 10; ++i){cout << a[i] << endl;}return 0;
}

基数排序(稍微困难)相关推荐

  1. 如何破解汽车-快速的速成课程

    by Kenny Kuchera 肯尼·库切拉(Kenny Kuchera) 如何破解汽车-快速的速成课程 (How to hack a car - a quick crash-course) The ...

  2. 面试官问:高并发下,你都怎么选择最优的线程数?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | https://urlify.cn/YFbMNf 为了加 ...

  3. 这里有最全的k8s初学者指南!!!

    Kubernetes现在已经成为在私有云,公共云和混合云环境中大规模部署集装箱化应用程序的标准.最大的公共云平台AWS,Google Cloud,Azure,IBM Cloud和OracleCloud ...

  4. python爬网页数据用什么_初学者如何用“python爬虫”技术抓取网页数据?

    原标题:初学者如何用"python爬虫"技术抓取网页数据? 在当今社会,互联网上充斥着许多有用的数据.我们只需要耐心观察并添加一些技术手段即可获得大量有价值的数据.而这里的&quo ...

  5. 干货篇:AI赋能医药工业发展案例

    编辑导语:医药工业往往研发周期长.成功率低并且研发费用高,这也是一直是困扰制药企业的魔咒.而AI技术日新月异的发展给很多行业带来了变革,医药工业同样也受益于AI带来的技术红利,解决行业痛点,提高开发效 ...

  6. python编写赛车游戏单机版_使用Keras和DDPG玩赛车游戏(自动驾驶)

    为什么选择TORCS游戏 <The Open Racing Car Simulator>(TORCS)是一款开源3D赛车模拟游戏 看着AI学会开车是一件很酷的事 可视化并考察神经网络的学习 ...

  7. 一束激光冒充人声:110米外黑掉智能音箱,手机电脑平板也中招

    郭一璞 光栗子 发自 凹非寺 量子位 报道 | 公众号 QbitAI 周末的下午,你正在家里打游戏,不曾注意到身旁的智能音箱上,多出了一个小绿点. 那是一束激光,来自窗外马路对面的另一栋建筑. 突然, ...

  8. malloc/new函数及malloc()的一种简单原理性实现

    malloc函数 void *malloc(int size); 说明:malloc 向系统申请分配指定size个字节的内存空间.返回类型是 void* 类型.void* 表示未确定类型的指针.C,C ...

  9. 重构-改善既有代码的设计:简化函数调用 (八)

    简化函数调用 1.  Rename Method 函数改名 函数的名称未能揭示函数的用途.修改函数名称. 大力提倡的一种编程风格是:将复杂的处理分解成小函数.但是,如果做得不好,这会使你费尽周折却弄不 ...

最新文章

  1. 中国矿业大学考研计算机技术,中国矿业大学(北京)(专业学位)计算机技术考研难吗...
  2. 中间人攻击框架以及工具,中国寒龙出品欢迎下载!~
  3. 数据处理之判断值是否为nan(空值)记录
  4. 关于火狐中使用jquery的animate做动画效果的问题解决
  5. oracle数据库访问sqlserver2008,透过SQL Server 2008访问Oracle 10g的配置方法
  6. Effective Java(1)-创建和销毁对象
  7. apache hive_通过6个简单的步骤在Windows上运行Apache Hive
  8. 5复数与复变函数(五)
  9. ASoC Codec驱动代码框架图
  10. linux ps的a选项,linux下PS命令详解(转载)
  11. Adjustment OfficeInput file
  12. iOS 开发AVFoundation系统原生二维码扫描实现
  13. python处理excel和word文档
  14. 802.11--802.11a协议
  15. ADAS/AD控制器模块开发11 - UDS与配置、校准
  16. DHCPV6 开源代码如何获取device的MAC
  17. 仿百度联想词下拉列表,键盘上下键选值
  18. kindle 更新_如何手动更新您的Kindle
  19. Unity Cinemachine Timeline 制作镜头动画
  20. 洛谷 P2495 [SDOI2011]消耗战 题解

热门文章

  1. python自动化办公都能做什么-用Python自动办公,做职场高手(完结)
  2. python能做什么工作-谁适合学Python?学了Python可以做什么工作?
  3. python入门指南-Python完全小白入门指南
  4. 传统语音识别(GMM+HMM)
  5. 怎么用matlab显示噪声,怎么用MATLAB产生噪声调频信号
  6. 301 302区别_302状态码代表什么,302状态码解决方法
  7. 【离散数学笔记】计数原理:解决计数问题的基本方法
  8. SDL2源代码分析1:初始化(SDL_Init())
  9. HDTV(1920x1080)码率和视频质量关系的研究 1 (前期准备)
  10. python 从列表中随机选择_使用条件Python从列表中随机选择