基数排序思想和代码
来源:互联网 发布:js 扩展window对象 编辑:程序博客网 时间:2024/05/22 13:12
把每个数映射为一个结构体,添加一个位数值的属性,然后从最低位到最高位按此位的值对这组数排序。排序可使用计数排序(因为待排值都分布在很小的区间内)
此代码已A过 POJ2388
#include <stdio.h>#define LENGTH 1000001#define MAXNUM 10int a[LENGTH];int count[MAXNUM];struct{int digit;//keyint num;}digit_num[LENGTH];struct{int digit;int num;}result[LENGTH];void print(int* a,int x,int y){ int i; for (i = x; i < y+1; i++) printf("%d ",a[i]); printf("\n");}void counting_sort(int n){ int i; for(i = 0 ; i < MAXNUM;i++) count[i] = 0; for(i = 0 ; i < n;i++) count[digit_num[i].digit]++; for(i = 1 ; i < MAXNUM;i++) count[i] += count[i-1]; for(i = 0 ; i < MAXNUM;i++) count[i] --; for(i = n-1 ; i >= 0;i--){ result[count[digit_num[i].digit]].num = digit_num[i].num; count[digit_num[i].digit]--; } for(i = 0; i < n; i++) digit_num[i].num = result[i].num;}int get_num_at_digit(int num,int d){int mul,i,m;mul = 1;for(i = 1;i <= d; i++)mul*=10;m = num%mul/(mul/10);return m;}void radix_sort(n){int i,d;d = 0;for(i = 0; i < n ; i++){int dd,num;dd = 1;num = a[i];digit_num[i].num = num;while(num/10 > 0){num /= 10;dd ++;}d = d > dd ? d : dd;}int j;for(j = 1; j <= d; j++){for(i = 0; i < n; i++)digit_num[i].digit = get_num_at_digit(digit_num[i].num,j);counting_sort(n);}}int main(){ int n,i; freopen("sort.in","r",stdin); scanf("%d",&n); for(i = 0 ; i < n ; i++) scanf("%d",&a[i]); radix_sort(n); for(i = 0 ; i < n;i++) printf("%d ",digit_num[i].num); printf("\n");return 0;}
0 0
- 基数排序思想和代码
- 多关键字及基数排序思想
- 排序算法之堆排序、基数排序和归并排序的思想及部分实现
- 基数排序java实现代码
- 基数排序之代码优化
- 基数排序 java代码实现
- 数据结构--基数排序(RadixSort)思想与实现
- shadowMap的思想和核心代码
- Cuckoo Hash 基本思想和代码实现
- 贪心算法基本思想和代码框架
- 冒泡排序思想和实现代码
- 选择排序基本思想和实现代码
- word2vec 模型思想和代码实现
- 设备信息和驱动代码分离思想
- word2vec 模型思想和代码实现
- 计数排序和基数排序
- 计数排序和基数排序
- 基数排序和计数排序
- List的add方法剖析
- 二叉树的遍历 Java版
- Visual Studio:error MSB8020
- Mac OS X下Visual Studio Code搭建Golang(Go语言)开发环境
- HWADDR配置错误导致network重启失败处理
- 基数排序思想和代码
- Linux iptables防火墙实用模板
- QT Creator Beautifying Source Code with Artistic Style
- Android学习资料整理(二)
- SQL语句妙用
- matlab计时
- Centos中mount命令挂载windows7共享目录
- 第一个AngularJS Web应用 todoList
- 使用GoAccess分析Nginx日志以及sed/awk手动分析实践