radix_sort() { int i,k,dig,maxdig,mindig,least_sig,most_sig; struct node *p, *rear[10], *front[10]; least_sig=1; most_sig=large_dig(start); for(k = least_sig; k <= most_sig ; k++) { printf("PASS %d : Examining %dth digit from right ",k,k); for(i = 0 ; i <= 9 ; i++) { rear[i] = NULL; front[i] = NULL ; } maxdig=0; mindig=9; p = start ; while( p != NULL) { /*Find kth digit in the number*/ dig = digit(p->info, k); if(dig>maxdig) maxdig=dig; if(dig<mindig) mindig=dig; /*Add the number to queue of dig*/ if(front[dig] == NULL) front[dig] = p ; else rear[dig]->link = p ; rear[dig] = p ; p=p->link;/*Go to next number in the list*/ }/*End while */ /* maxdig and mindig are the maximum amd minimum digits of the kth digits of all the numbers*/ printf("mindig=%d maxdig=%d\n",mindig,maxdig); /*Join all the queues to form the new linked list*/ start=front[mindig]; for(i=mindig;i<maxdig;i++) { if(rear[i+1]!=NULL) rear[i]->link=front[i+1]; else rear[i+1]=rear[i]; } rear[maxdig]->link=NULL; printf("New list : "); display(); }/* End for */ }/*End of radix_sort*/
void radix_sort() { int i,k,dig,least_sig,most_sig; struct node *p, *rear[10], *front[10]; least_sig=1; most_sig=large_dig(start); for(k=least_sig; k<=most_sig; k++) { /*Make all the queues empty at the beginning of each pass*/ for(i=0; i<=9 ; i++) { rear[i] = NULL; front[i] = NULL ; } for( p=start; p!=NULL; p=p->link ) { /*Find kth digit in the number*/ dig = digit(p->info, k); /*Add the number to queue of dig*/ if(front[dig] == NULL) front[dig] = p ; else rear[dig]->link = p; rear[dig] = p; } /*Join all the queues to form the new linked list*/ i=0; while(front[i] == NULL) i++; start = front[i]; while(i<9) { if(rear[i+1]!=NULL) rear[i]->link=front[i+1]; else rear[i+1]=rear[i]; i++; } rear[9]->link=NULL; } }/*End of radix_sort*/
radix_sort() { int i,k,dig,least_sig,most_sig; struct node *p, *rear[10], *front[10]; least_sig=1; most_sig=large_dig(start); for(k=least_sig; k<=most_sig; k++) { printf("PASS %d : \n",k); printf("Examining %dth digit from right-\n\n",k); for(i = 0 ; i <= 9 ; i++) { rear[i] = NULL; front[i] = NULL ; } p = start ; while( p != NULL) { /*Find kth digit in the number*/ dig = digit(p->info, k); /*Add the number to queue of dig*/ if(front[dig] == NULL) front[dig] = p ; else rear[dig]->link = p; rear[dig] = p ; p=p->link;/*Go to next number in the list*/ } /*Add NULL to end of each queue to display it*/ for(i=0; i<=9; i++) { if(rear[i]!=NULL) rear[i]->link=NULL; } for(i=0; i<=9; i++) { printf("%d -- ",i); p = front[i]; while(p!=NULL) { printf("%d " ,p->info); p=p->link; } printf("\n"); } /*Join all the queues to form the new linked list*/ i=0; while(rear[i] == NULL) i++; start = front[i]; while(i<9) { if(rear[i+1]!=NULL) rear[i]->link=front[i+1]; else rear[i+1]=rear[i]; i++; } rear[9]->link=NULL; printf("New list : "); display(); printf("\n"); STOP; }/*End for*/ }/*End of radix_sort*/