基数排序
2012-09-06 15:25
295 查看
祈祷找个好工作……
基数排序,按照从低位到高位,往桶子里塞(LSD)
参考资料:http://baike.baidu.com/view/1170573.htm
基数排序,按照从低位到高位,往桶子里塞(LSD)
参考资料:http://baike.baidu.com/view/1170573.htm
#include "stdio.h" #include "string.h" #include "stdlib.h" typedef struct _Node{ int num; int pos; struct _Node* next; }Node, *pNode; pNode table[10]; pNode end[10]; int num[] = {34, 112, 4, 55, 81, 33, 3233, 40, 3, 66, 0, 22323454}; int n = 12; pNode sort(){ int i, p, mk; pNode t, r, e, ans, tail; memset(table, 0, sizeof(table)); memset(end, 0, sizeof(end)); r = e = 0; for(i=0; i<n; i++){ t = (pNode)malloc(sizeof(Node)); t->num = num[i]; t->pos = i; if(r==e && !e) r = e = t; else{ e->next = t; e = t; } } e->next = 0; ans = tail = 0; while(1){ while(r){ if(!r->num){ if(ans==tail && !tail) ans = tail = r; else{ tail->next = r; tail = r; } r = r->next; continue; } p = r->num%10; r->num /= 10; if(table[p]==end[p] && !end[p]) table[p] = end[p] = r; else{ end[p]->next = r; end[p] = r; } r = r->next; } r = e = 0; mk = 1; for(i=1; i<n; i++){ if(table[i]){ if(r==e && !e){ r = table[i]; e = end[i]; } else{ e->next = table[i]; e = end[i]; } mk = 0; } table[i] = end[i] = 0; } if(mk) break; e->next = 0; } tail->next = 0; return ans; } int main(){ pNode r = sort(); while(r){ printf("%d ", num[r->pos]); r = r->next; } printf("\n"); return 0; }
相关文章推荐
- 基数排序----非比较型排序
- 基数排序 Radix Sort
- 基数排序
- 队的应用之基数排序
- HDU-1106 快排模板 和 基数排序
- 基数排序 原始java实现 时间复杂度O(n)
- 【数据结构】算法10.15-10.17 链式基数排序
- 算法 排序算法之基数排序
- 16. 数据结构进阶十六排序实现之基数排序
- 经典排序算法 - 基数排序Radix sort
- 基数排序
- 排序算法大全之基数排序
- 数据结构之排序大集合(下)(选择、堆、基数、归并,链表排序)
- 基数排序
- 基数排序
- 基数排序(基于计数排序)
- 基数排序总结
- 基数排序算法之Java实现
- 第十六周项目1-验证算法(8)基数排序
- 第十六周【项目一-(8)基数排序】