基数排序 - 主位优先
2016-09-13 20:05
267 查看
算法思想:
主位优先 排序好后直接导出
2,130,22,10,1230,4565,64,340,2430,1340
D=4。
桶0:2,130,22,10,64,340, || 桶1:1230,1340 || 桶4:4565
D=3
桶0:2,22,10,64 桶1:130 桶3:340 || 桶2:1230 桶3 1340 || 桶5:4565
D=2
桶0:2 桶1:10 桶2:22 桶6:64 || 桶3:130 || 桶4:340 || 桶3:1230 || 桶4:1240 || 桶6: 4565
D=1
桶2:2 || 桶0:10 ||桶2:22 ||桶4:64 ............................................................................
错误分析:
1 42行 注意不要将list赋给p
2 30行不好理解
...............................................
主位优先 排序好后直接导出
2,130,22,10,1230,4565,64,340,2430,1340
D=4。
桶0:2,130,22,10,64,340, || 桶1:1230,1340 || 桶4:4565
D=3
桶0:2,22,10,64 桶1:130 桶3:340 || 桶2:1230 桶3 1340 || 桶5:4565
D=2
桶0:2 桶1:10 桶2:22 桶6:64 || 桶3:130 || 桶4:340 || 桶3:1230 || 桶4:1240 || 桶6: 4565
D=1
桶2:2 || 桶0:10 ||桶2:22 ||桶4:64 ............................................................................
void MSD( ElementType A[], int L, int R, int D ) { Bucket B; int i,j ,Di; PtrToNode P,temp,list=NULL; if(D==0) return; /*初始化桶*/ for(i=0;i<Radix;i++) B[i].head=B[i].tail=NULL; /*将数组逆序导入链表list*/ for(i=L;i<=R;i++) { temp=(PtrToNode)malloc(sizeof( struct Node)); //新建temp temp->key=A[i]; temp->Next=list; // 第一次temp为list list为null list=temp; //更新list 为temp } /*分配*/ P=list; while(P) { Di=GetDigital(P->key,D); temp=P; P=P->Next; if (B[Di].head == NULL) B[Di].tail = temp; temp->Next = B[Di].head; B[Di].head = temp; } /*收集*/ i=j=L; for(Di=0;Di<Radix;Di++) { if(B[Di].head) { P=B[Di].head; while(P) { temp=P; P=P->Next; A[j++]=temp->key; free(temp); } MSD(A,i,j-1,D-1); i=j; } } } void MSDRadixSort( ElementType A[], int N ) { /* 统一接口 */ MSD(A, 0, N-1, MaxDigit); }
错误分析:
1 42行 注意不要将list赋给p
2 30行不好理解
...............................................
相关文章推荐
- Linq查询与方法调用
- 【数据库】E-R图向关系模型转换的规则
- 单片机==流水灯(1)
- EMGU 阈值、滤波处理
- 在.net中常用的几种页面间传递参数的方法,并说出他们的优缺点。
- 接口、反射
- 视频编解码学习之二:编解码框架
- Android 学习之初识wifi
- [LeetCode 4]Median of Two Sorted Arrays 二分查找
- boot目录误删修复
- ObjectCache缓存
- STL::List部分函数实现
- Session有什么重大BUG,微软提出了什么方法加以解决?
- 树状数组单点更新和区间更新,二维数组poj2155(区间更新,单点查询)(已加入区间修改区间查询)
- poj 2403 Hay Points
- 动态规划之----我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
- CodeForces 677D Vanya and Treasure
- Js雪花背景
- redis 启动服务
- 【LightOJ 1265】Island of Survival(概率DP)