/* вызов распределяющeй сортировки списка */ #include#include typedef struct str { long val; struct str *n; } SP1; main() { int i; SP1 *q=malloc(sizeof(SP1)),*r; SP1 *pocket(SP1 * ,int ); long a[14]={ 0,7,18,3,52,4,6,8,5,13,42,30,35,26 }; q->n=NULL; q->val=a[0]; r=q; printf(" %d",a[0]); for(i=1;i<14;i++) /* формирование списка */ { r->n=malloc(sizeof(SP1)); r->val=a[i]; (r->n)->n=NULL; r=r->n; printf(" %d",a[i]); } r=pocket(q,2); printf("\n"); /* печать результатов */ while (r!=NULL) { printf(" %d",r->val); r=r->n; } } /* распределяющая сортировка списка */ SP1 *pocket(SP1 *q,int t) { int i,j,k,m=1; SP1 *r, *gg, *a[10], *b[10]; gg=q; for(j=1;j<=t;j++) { for(i="0;i<=9;i++)" a[i]="(b[i]=NULL);" while(q!="NULL)" { k="((int)(q-">val/m))%(int)10; r=b[k]; if (a[k]==NULL) a[k]=q; else r->n=q; r=b[k]=q; q=q->n; r->n=NULL; } for(i=0;i<=9;i++) if (a[i]!="NULL)" break; q="a[i];" r="b[i];" for(k="i+1;k<=9;k++)" if(a[k]!="NULL)" { r->n=a[k]; r=b[k]; } m=m*10; } return (gg); }