基数排序

来源:互联网 发布:淘宝客新手教程视频 编辑:程序博客网 时间:2024/05/19 08:36

#include<stdio.h>#define dd 4#define  rr 10#define  nn 11struct data{char key[dd];int next;}R[nn];struct pointer{int f;int e;}Q[rr];void init(int n){int i;for(i=0;i<n-1;i++)   R[i].next=i+1;R[n-1].next=0;printf("/ninput%ddata(<=%d bit)to sort:/n",nn-1,dd-1);for(i=1;i<n;i++)scanf("%s",R[i].key);}int divsort(){ int p=1; int k,temp; int i,j; for(i=dd-2;i>=0;i--) {for(j=0;j<rr;j++) {Q[j].f=0;Q[j].e=0;} while(p>0){ k=R[p].key[i]-48; if(!Q[k].f){Q[k].f=p;Q[k].e=p;} else{R[Q[k].e].next=p;Q[k].e=p;} p=R[p].next;} j=0; while(Q[j].f==0)  j=succ(j); p=Q[j].f; temp=Q[j].e; k=succ(j); while(k<rr) {if(Q[k].f){R[temp].next=Q[k].f; temp=Q[k].e; } k=succ(k);} R[temp].next=0; printf("/n%d-time collect/n",dd-i-1); display(p); } return(p);}int succ(int j){return(j+1);}

 display(int thead){ int i=thead;while(i){printf("%s",R[i].key);i=R[i].next;}printf("/n");}main(){int head=1;init(nn);printf("/nThe  original  data/n");display(head);getchar();head=divsort();printf("/nThe  sorted data:/n");display(head);getchar();}

原创粉丝点击