/************************
author's email:wardseptember@gmail.com
date:2017.12.7
基数排序两种实现方法
************************/#include <iostream>
#include<math.h>
#define maxSize 10
using namespace std;
void radixSort1(int *array, int digits);//基数排序
void radixSort2(int *a, int digits);//计数法基数排序
void printArray(int D[], int n);//输出数组
void main() {int D[maxSize] = { 12,805,484,46,116,378,257,588,465,4 };//构造一个一维数组int E[maxSize] = { 12,805,484,46,116,378,257,588,465,4 };//构造一个一维数组cout << "基数排序结果为:" << endl;radixSort1(D, 3);printArray(D, maxSize);cout << endl;cout << "计数法基数排序结果为:" << endl;radixSort2(E, 3);printArray(E, maxSize);
}
void radixSort1(int *a, int digits)//digits表示关键字最大位数,如465是三位
{int* tmpArray[maxSize];// 定义桶个数 0~9 共10个  int index, pos, element, eleNumber, tmp, log = 1;for (element = 0; element < maxSize; element++) {// 每个桶最大能装maxSize个关键字,预防所有关键字都是同一个数  tmpArray[element] = (int*)malloc((sizeof(int))*(maxSize + 1));tmpArray[element][0] = 0;// 初始化为0  }for (pos = 0; pos < digits; pos++) {// 从个位、十位、百位依次排序  for (element = 0; element < maxSize; element++) {// 把关键字放到桶里,分配动作  tmp = ++tmpArray[(a[element] / log) % 10][0];tmpArray[(a[element] / log) % 10][tmp] = a[element];}for (index = 0, element = 0; (element < maxSize) && (index < maxSize); element++) {for (eleNumber = 1; eleNumber <= tmpArray[element][0]; eleNumber++)a[index++] = tmpArray[element][eleNumber];tmpArray[element][0] = 0;}log = log * 10;}
}
void radixSort2(int *a, int digits) {//digits表示关键字最大位数,如465是三位数for (int k = 1; k <= digits; ++k) {int tmpArray[maxSize];//存放基数排序的结果/*十个桶,从0到9,分别存储个位或十位或百位上的数。如12,它个位上为2,放在桶2*/int countingArray[10] = { 0,0,0,0,0,0,0,0,0,0 };for (int i = 0; i < maxSize; ++i) {//k=1,取关键字个位上的数int temSplitDigit = a[i] / (int)pow(10, k - 1)- (a[i] / (int)pow(10, k)) * 10;countingArray[temSplitDigit] += 1;//统计每个桶所含的关键字的个数}// 统计大于各元素的个数 for (int m = 1; m < 10; m++){countingArray[m] += countingArray[m - 1];}/*把排序结果赋值给temArray数组*/for (int n = maxSize - 1; n >= 0; n--){int tmpSplitDigit = a[n] / (int)pow(10, k - 1) - (a[n] / (int)pow(10, k)) * 10;tmpArray[countingArray[tmpSplitDigit] - 1] = a[n];countingArray[tmpSplitDigit] -= 1;}for (int p = 0; p < maxSize; p++){a[p] = tmpArray[p];//把排序结果赋值给a[]}}
}
void printArray(int D[], int n) {for (int i = 0; i < n; ++i)  //输出排序后的关键字cout << D[i] << " ";cout << endl;
}

经典算法之基数排序两种实现相关推荐

  1. 水平集方法引入主动轮廓模型算法中的两种方法

    水平集方法引入主动轮廓模型算法中的两种方法 1.传统的基于主动轮廓模型和水平集理论的方法 2.变分水平集方法 在讲解水平集理论在主动轮廓模型中的应用前,我们先用流程图说明一下常见的处理主动轮廓模型的流 ...

  2. sum 去重_总结leetcode上【排列问题】【组合问题】【子集问题】回溯算法去重的两种写法!...

    本周小结!(回溯算法系列三)续集 在 本周小结!(回溯算法系列三) 中一位录友对 整颗树的本层和同一节点的本层有疑问,也让我重新思考了一下,发现这里确实有问题,所以专门写一篇来纠正,感谢录友们的积极交 ...

  3. 【CV/Matlab系列】基于Matlab的白平衡算法实现(两种方法)

    DATE: 2020.11.22 文章目录 1.前言 2.白平衡算法 2.1 原始图像 2.2 灰色世界法 2.3 完美反射算法 1.前言 在之前大学毕设时,设计了一种基于Matlab的白平衡算法,采 ...

  4. PCA(2):PCA算法实现的两种方式

    因为样本个数和特征维度的是不相等de,所以组成的矩阵不是方阵. 第一种方式:特征分解思路(特征值分解要求分解的矩阵是方阵) 基于样本特征维度,先求协方差矩阵---->再特征分解(因为协方差矩阵是 ...

  5. 九大经典算法之基数排序、桶排序

    08 基数排序(Radix Sort) 基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较.排序过程是将所有待比较数值统一为同样的数位长度,数位较短的数前 ...

  6. 快排算法及常见两种常见优化方法

    简书同步发布 正常快排 最近在找实习,然而我觉得博客还是要坚持日更,我相信时间总是挤出来的,不扯淡了,快排这是个面试常考题,今天主要着重于讲他的优化方法,那我就直接先贴快排代码,再来细细道来我所知道的 ...

  7. 进化算法中的两种常用交叉算子SBX和DE

    SBX:模拟二进制交叉(Simulated binary crossover),需要随机选择两个父代 DE:差分进化算子(differential evolution),需要随机选择三个父代

  8. 微信的红包算法 了解一下两种就可以了

    1.微信红包算法 代码大致意思是这样的:假设有100元钱,分给十个人.那么第一个人获得红包大小怎么计算呢?100/10 = 10元.这是期望值.从0.01到20的区间中(其中20=10乘以2)随机抽取 ...

  9. c语言两种排序方法的组合,排列和组合算法的实现方法_C语言经典案例

    排列和组合算法是考查递归的常见算法,这两种算法能用递归简洁地实现. 本人在经过多次摸索和思考之后,总结如下,以供参考. 程序代码如下: #include #include char array[] = ...

最新文章

  1. R语言观察日志(part1)--subset函数
  2. bootstrap 打印组件_创想三维:有了3D打印机,后期该如何维护呢-创想三维 Ender-1_深圳3D打印机行情...
  3. 语音识别插件_2D动画唇动合成,根据语音自动生成动画人物口型
  4. Pandas 文本数据方法 is*()
  5. 微软投资混合连接,发布本地数据网关
  6. Windows server常见操作、问题
  7. java类验证和装载顺序_深度分析Java的ClassLoader机制(源码级别)
  8. 自增、主键的优缺点(数据库)
  9. cruise软件模型,混动仿真模型,IMMD架构混联混动仿真模型,Cruise混动仿真模型,混联混动汽车动力性经济性仿真
  10. 如何绘制用例图 - How to Draw Use Case Diagram
  11. JZOJ1900. 【2010集训队出题】矩阵
  12. 对口升学考试计算机专业好考吗,2017届对口升学考试计算机专业月考三试题
  13. c语言要使用数学函数,c语言中用到的 数学函数(转)
  14. 在sqli-liabs学习SQL注入之旅(第十一关~第二十关)
  15. IDEA设置类文件模板@Auther@Date等注释信息——idea笔记
  16. GLView基本分析
  17. 8月8日科技快讯:库比蒂诺想修超级高铁,市长点名要苹果掏钱
  18. html css js调用dll,node调用dll 方法,及详细步骤
  19. 有了这些包装样机,以后再也不用求人设计啦!
  20. Windows关闭ms-gamingoverlay弹窗

热门文章

  1. 【博学谷学习记录】超强总结,用心分享|大数据之Presto
  2. redis:地理位置信息geo
  3. mysql 搜索条件包含与被包含
  4. 2016百度之星总结帖
  5. uni-app开发多端之钉钉小程序
  6. win7下安装xp双系统--ghost最简单完美版
  7. linux入门,满足工作中常见小场景。(持续更新)
  8. 【比赛回顾】广工2020程序设计决赛——排解忧伤
  9. java人名识别_HanLP-基于HMM-Viterbi的人名识别
  10. 万万没想到:对JS代码混淆,竟造成这样的性能损失?