Beispiel #1
0
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*/
Beispiel #2
0
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*/
Beispiel #3
0
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*/