《算法导论》 8.3 基数排序
来源:互联网 发布:windows网络编程教程 编辑:程序博客网 时间:2024/04/30 00:20
基数排序:是一种用在老式穿卡机上的算法。一张卡片有80列,每一列可以在12个位置中的任一处穿孔。排序器可以被机械地“程序化”,以便对一叠卡片中的每一列进行检查,再根据穿孔的位置将它们分放入12个例子里。这样,操作员就可以逐个地将它们收集起来,其中第一个位置穿孔的放在最上面,第二个位置穿了孔的其次,等等
对十进制数字来说,系列中只用到10个位置。一个d位数占用d个列。因为卡片排序器一次只能查看一个列,因此,要对n张卡片上的d倍数进行排序,就需要用到排序算法。
基数排序算法的代码是很直观的。在下面的过程中,假设长度为n的数组A中,每个元素都有d位数字,其中第一位是最低位,第d位是最高位。
RADIX-SORT(A, d)
for i ← 1 to d do use a stable sort to sort array A on digit i
在C++实现中,我使用了一个辅助的函数 int maxDigit(int* arr,int digit)来计算待排序数组中最大的数位,以使程序有更大的适用范围,不需要待排序的数字位数相同。
基数排序的算法很直观。在一个数组中,每个元素都有d位数字,其中第1位是最低位,第d位是最高位。依次判断每个位置的排序。基数排序需要另一种稳定的排序算法(stable sort)进行辅助。
#include <iostream> using namespace std; //求数组中数字的最大位数 int maxDigit(int* arr,int digit) { int n = 0; int* temp = new int[digit]; for(int i = 0; i < digit; i++) temp[i]= arr[i]; for(int i = 0; i < digit; i++) { int counter =1; while(temp[i] / 10 > 0) { counter++; temp[i] /= 10; } if(n < counter) n = counter;//找位置最大值。 } delete[] temp; return n; } //基数排序 void radixSort(int* arr, int digit) { int n = maxDigit(arr, digit); int* temp = new int[digit]; int* count = new int[10]; int i, j, k; int radix = 1; for(i = 1; i <= n; i++) { for(j = 0; j < 10; j++) count[j] = 0; for(j = 0; j < digit; j++) { k = (arr[j] / radix) % 10; count[k]++; } for(j = 1; j < 10; j++)//以下是用计数排序法进行重新排序的过程。。排序算法。。。 count[j] = count[j-1] + count[j]; for(j = digit - 1; j >= 0; j--) { k = (arr[j] / radix) % 10; count[k]--; temp[count[k]] = arr[j]; } for(j = 0; j < digit; j++) arr[j] = temp[j]; radix *= 10; } delete[] temp; delete[] count; } int main() { int a[] = {22, 34, 95, 87, 56, 980, 12, 48}; radixSort(a, 8); for(int i = 0; i < 8; i++) { cout << a[i] << " "; } cout << endl; return 0; }
- 《算法导论》 8.3 基数排序
- 算法导论CLRS 8.3 基数排序
- 算法导论 基数排序 习题8.3-4
- 【算法导论】基数排序
- 基数排序----算法导论
- 算法导论 基数排序
- 《算法导论》学习之基数排序
- 《算法导论》笔记 第8章 8.3基数排序
- 算法导论学习笔记——基数排序
- 算法导论第八章——基数排序
- 【算法导论】第八章之基数排序
- 算法导论_基数排序学习笔记
- 算法导论第八章伪码转C++_基数排序
- 算法导论------------计数排序and基数排序
- 《算法导论》的基数排序 C++实现
- 《算法导论》读书笔记--计数排序&基数排序
- 算法导论例程——基数排序
- 算法导论程序16--基数排序(Python)
- css+div练手-工作室
- FormClosedEventArgs.CloseReason 属性
- mass storage
- js继承6-----寄生组合式继承
- Java中final 关键字相关 JVM编译static,final
- 《算法导论》 8.3 基数排序
- VCL组件之公用对话框组件
- php中DateTime的format格式以及 TtoDatetime函数
- Git详解之五 分布式Git
- 搜索到的NAS DIY 相关内容
- activity生命周期
- 黑马程序员--- static、静态的应用、帮助文档的制作
- 关于单链表逆置
- POJ 1815 给定源汇的无向图点连通度 输出字典序最小的方案