基数排序
2012-09-06 15:32
141 查看
//基数排序 #include<iostream.h> void funCount(int *count,int* a,int length,int num)//对应位上数字的个数 { for (int i=0;i<length;i++) { int x=a[i]; for (int j=2;j<=num;j++) { x=x/10; } x=x%10; count[x]++; } } void funIndex(int* count,int* index)//对应位上数字开始存放的位置 { for (int i=1;i<10;i++) { index[i]=index[i-1]+count[i-1]; } } void funSort(int* a,int* b,int* index,int length,int num)//向辅助数组上放数字 { for (int i=0;i<length;i++) { int x=a[i]; for (int j=2;j<=num;j++) { x=x/10; } x=x%10; b[index[x]++]=a[i]; } } int fun(int *a,int length)//返回数字中最长的长度 { int max=a[0]; for (int i=0;i<19;i++) { if (max<a[i]) { max=a[i]; } } int x=0; while (max!=0) { max=max/10; x++; } return x; } void main() { int a[]={3,36,58,12,62,59,26,39,78,97,31,50,1254,70,88,64,34,127}; int b[18]; int length=fun(a,18); int *temp1=a; int *temp2=b; for(int i=1;i<=length;i++) { int count[10]={0};//存储每位的对应的个数 int index[10]={0};//开始存放的下标 funCount(count,temp1,18,i); funIndex(count,index); funSort(temp1,temp2,index,18,i); int *temp=temp1;//交换一下指针的指向 temp1=temp2; temp2=temp; } for (i=0;i<18;i++) { cout<<b[i]<<" "; } cout<<endl; }
相关文章推荐
- 基数排序----非比较型排序
- 基数排序 Radix Sort
- 基数排序
- 队的应用之基数排序
- HDU-1106 快排模板 和 基数排序
- 基数排序 原始java实现 时间复杂度O(n)
- 【数据结构】算法10.15-10.17 链式基数排序
- 算法 排序算法之基数排序
- 16. 数据结构进阶十六排序实现之基数排序
- 经典排序算法 - 基数排序Radix sort
- 基数排序
- 排序算法大全之基数排序
- 数据结构之排序大集合(下)(选择、堆、基数、归并,链表排序)
- 基数排序
- 基数排序
- 基数排序(基于计数排序)
- 基数排序总结
- 基数排序算法之Java实现
- 第十六周项目1-验证算法(8)基数排序
- 第十六周【项目一-(8)基数排序】