基数排序C语言代码实现
2015-06-26 09:11
190 查看
#include<stdio.h> typedef struct { int num; int next; }slcell; //静态链表的结点类型 #define M 11 int f[M]; int e[M]; int head=0; void distribute(slcell *a,int w) { int i; int last; for(i=0;i<10;i++) f[i]=-1; for(i=head;i!=-1;i=a[i].next) { last=(a[i].num/w)%10; if(f[last]==-1) f[last]=i; else a[e[last]].next=i; e[last]=i; } } //某一次排序 void collect(slcell *a) { int i; int l = -1; for (i=0; i<10; i++) if (f[i] != -1) { if (l == -1) head = f[i]; else a[l].next = f[i]; l = e[i]; } a[l].next = -1; } //将排序好的数组恢复成静态链表 void Output(slcell *a, int head) { while (head != -1) { printf("%4d", a[head].num); head = a[head].next; } printf("n"); } //输出静态链表中的值 void main() { int i,max,k=1; slcell a[M]; printf("请依次输入%d个整数n",M); printf("请输入第1个数:"); scanf("%d",&a[0].num); a[0].next=1; max=a[0].num; for(i=1;i<M;i++) { printf("请输入第%d个数:",i+1); scanf("%d",&a[i].num); a[i].next=i+1; if(max<a[i].num) max=a[i].num; } a[M-1].next=-1; for(i=1;i<max;i=i*10) { distribute(a,i); collect(a); printf("第%d排序的结果是:n",k); Output(a,head); k++; } }
相关文章推荐
- 基数排序法C++代码实现
- More Effective C++ 条款7 千万不要重载&&,||和,操作符
- Effective C++ 条款20
- More Effective C++ 条款6 区别 increment/decrement 操作符的前置(prefix)和后置(postfix)形式
- [C++ primer]第五章笔记-语句
- g++编C++11/C++0x遇到的问题
- More Effective C++ 条款5 对定制的"类型转换函数"保持警觉
- More Effective C++ 条款4 非必要不提供 default constructor
- C++面试中的singleton类
- 面试时做过的几个C/C++笔试题
- c++编程注意事项
- C++对象内存分布(1) - 私有虚函数
- C\C++代码优化的27个方法
- 【学习笔记】【C语言】指向函数的指针
- More Effective C++ 条款3 绝对不要以多态(polymorphically)方式处理数组
- 【学习笔记】【C语言】返回指针的函数
- More Effective C++ 条款2 最好使用C++转型操作符
- C语言文件操作函数大全
- C语言控制用户输入的字符个数(curses.h代替conio.h)
- 程序编译是碰到的g++ 对c++11支持问题