#include<stdio.h> #define dd 4 #define rr 10 #define nn 11 struct 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(); }