第八章 线性时间排序

8.3 基数排序

算法导论上对基数排序的算法描述只有两行。。。 微言大义的说。。。

RADIX-SORT(A, d)

1 for i ← 1 to d
2     do use a stable sort to sort array A on digit i

C++代码

 1 #include <iostream>
 2
 3 using namespace std;
 4
 5 //求数组中数字的最大位数
 6 int maxDigit(int* arr,int digit)
 7 {
 8     int n = 0;
 9     int* temp = new int[digit];
10     for(int i = 0; i < digit; i++)
11         temp[i]= arr[i];
12     for(int i = 0; i < digit; i++)
13     {
14         int counter =1;
15         while(temp[i] / 10 > 0)
16         {
17             counter++;
18             temp[i] /= 10;
19         }
20         if(n < counter)
21             n = counter;
22     }
23     delete[] temp;
24     return n;
25 }
26
27 //基数排序
28 void radixSort(int* arr, int digit)
29 {
30     int n = maxDigit(arr, digit);
31     int* temp = new int[digit];
32     int* count = new int[10];
33     int i, j, k;
34     int radix = 1;
35     for(i = 1; i <= n; i++)
36     {
37         for(j = 0; j < 10; j++)
38             count[j] = 0;
39         for(j = 0; j < digit; j++)
40         {
41             k = (arr[j] / radix) % 10;
42             count[k]++;
43         }
44         for(j = 1; j < 10; j++)
45             count[j] = count[j-1] + count[j];
46         for(j = digit - 1; j >= 0; j--)
47         {
48             k = (arr[j] / radix) % 10;
49             count[k]--;
50             temp[count[k]] = arr[j];
51         }
52         for(j = 0; j < digit; j++)
53             arr[j] = temp[j];
54         radix *= 10;
55     }
56     delete[] temp;
57     delete[] count;
58 }
59
60 int main()
61 {
62     int a[] = {22, 34, 95, 87, 56, 980, 12, 48};
63     radixSort(a, 8);
64     for(int i = 0; i < 8; i++)
65     {
66         cout << a[i] << " ";
67     }
68     cout << endl;
69     return 0;
70 }

在C++实现中,我使用了一个辅助的函数 int maxDigit(int* arr,int digit)来计算待排序数组中最大的数位,以使程序有更大的适用范围,不需要待排序的数字位数相同。

基数排序的算法很直观。在一个数组中,每个元素都有d位数字,其中第1位是最低位,第d位是最高位。依次判断每个位置的排序。基数排序需要另一种稳定的排序算法(stable sort)进行辅助。

转载于:https://www.cnblogs.com/juventus/archive/2012/06/06/2538244.html

《算法导论》CLRS算法C++实现(六)P100 基数排序相关推荐

  1. 算法设计与分析_算法导论(CLRS)骨灰级笔记分享:目录

    倘若你去问一个木匠学徒:你需要什么样的工具进行工作,他可能会回答你:"我只要一把锤子和一个锯".但是如果你去问一个老木工或者是大师级的建筑师,他会告诉你"我需要一些精确的 ...

  2. 算法导论——A*算法易懂的证明

    算法导论--A*算法易懂的证明 前言 A* 证明 证明采用反证法,课上老师讲解不够清晰,课后自己下了点功夫,明白了A * 算法的原理. 前言 A*算法,其核心思想在于f(n)和Best-First.其 ...

  3. 算法导论 CLRS 第26章 最大流 Maximum flow C#

    2021/11/26 第六部分 图算法 第22章 基本的图算法 图数据结构设计 出度.入度和度 有向图 出度≠入度 先初始化出度,再初始化入度,u.入度=u.AdjList.length-u.out_ ...

  4. 算法导论——排序算法

    学习<算法导论>学习感受 转载于:https://www.cnblogs.com/xuddong/archive/2013/04/10/3012567.html

  5. 算法导论 CLRS 22.4-4 解答

    先说结论: 对于有环图,top排序不一定可以生成坏边最小的序列 证明: 1. 假设G至少需要去掉k条边才能变成无环图,则任意序列P的坏边数目bad[P] >= k: 证明: 如果存在P使得bad ...

  6. 算法导论 CLRS 23.3 解答 (未完成)

    a) T为G的一个最小生成树,(u,v)为T中的任意一条边,可以证明(u,v)是G中所有u--->v的路径中的最小的边, 反正法:假设u--->v的某条路径P中存在一条边(x,y)的权重小 ...

  7. 算法导论——贪心算法:哈夫曼编码(霍夫曼编码)

    2019独角兽企业重金招聘Python工程师标准>>> package org.loda.greedy;import org.junit.Test; import org.loda. ...

  8. 算法导论-排序算法-分治法

    1.分治法原理 所谓的分治指的就是分而治之,即将大规模的问题分解成几个较小规模的问题.通过对较小规模问题的求解达到对整个问题的的求解.当我们将问题分解成两个较小问题求解时的分治方法就是二分法. 分支的 ...

  9. 组合数学 算法导论 具体数学 博弈论 计算机科学数学

    组合数学[清华大学] https://www.bilibili.com/video/BV1sW411V7RU 15日掌握<具体数学>第1天学习直播实况记录(2019.5.27) https ...

  10. 重读《算法导论》第一章

    重读<算法导论> --------算法是程序的灵魂! 驱动力:本人从事开发10年有余,目前正在参与研发自动化编程.在代码解析.自动生成.以及源码分析过程中总会遇到一些算法的问题. 所以想着 ...

最新文章

  1. 连环清洁工之特殊任务--java资源如何关闭?
  2. Java工程师学习步骤
  3. 实现MySQL远程连接
  4. 程序设计课程技巧小总结
  5. android pss内存,如何释放android系统中pss cache住的内存
  6. 基于CFS算法的schedule()源码分析
  7. 美团技术:交易平台建设实践(视频+胶片)
  8. linux运维需要掌握的基础知识
  9. python-九九乘法打印
  10. ImageView的属性android:scaleType作用
  11. 启明星Zynq7010制作PYNQ V2.4镜像过程记录
  12. WAP PUSH解析(1)——SMS PDU编码
  13. 7天连锁酒店郑南雁:顺势创业者无为管理人
  14. windows环境搭建hadoop
  15. 迈达斯导出html计算书,动态计算书模块功能-midas Civil 2011
  16. 解决Ubuntu18.04搜狗输入法无法使用的问题
  17. php 如何移动文件,php怎样移动文件
  18. flink实战-实时计算平台通过api停止流任务
  19. ubuntu 解包和压包.img文件
  20. 深夜来一发,拿走不谢

热门文章

  1. redhad6.4 配置在线yum源
  2. RedHat系统安装nextcloud
  3. 用c语言赋值表示的例子,一起talk C栗子吧(第五回:C语言实例--数组巧妙赋值)...
  4. Python3.0的新改动
  5. nodeJs 接收请求参数和发送请求参数
  6. 美利财务平台数据库架构进阶
  7. 纠错帖:Zuul Spring Cloud Gateway Linkerd性能对比
  8. SQL Server 数据库原理与应用
  9. Raspberry Pi(树莓派)试用小记
  10. Java基础(二):基本数据类型和变量类型