049.基数排序

#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#define MAX 5
typedef struct node
{ int k;
  struct node *next;
} *lnode;
lnode my_input(int *d)
{ lnode head,temp,terminal;
 char s[MAX+1];
  printf("Input the records ('0' to end input):\n");
  scanf("%s",s);
  head=NULL;
  *d=0;
  terminal=NULL;
  while(s[0]!='0')
   {
   temp=(lnode)malloc(sizeof(struct node));
    if (strlen(s)>*d)
    *d=strlen(s);
    temp->k=atoi(s);
     if (head==NULL)
      { head=temp;
      terminal=temp;
      }
      else
      {
       terminal->next=temp;
        terminal=temp;
        }
         scanf("%s",s);
         }
	  terminal->next=NULL;

    return head;
}
void my_output(lnode h)
{
	lnode t=h;
	printf("\n");
	while (h!=NULL)
	{
		printf("%d ",h->k);
		h=h->next;
	}
	h=t;
	/* getch(); */
}
lnode Radix_Sort(lnode head,int d)
{
lnode p,q,h,t;
int i,j,x,radix=1;
 h=(lnode)malloc(10*sizeof(struct node));
  t=(lnode)malloc(10*sizeof(struct node));
   for (i=d;i>=1;i--)
   {
   for (j=0;j<=9;j++)
   { 	h[j].next=NULL;
   	t[j].next=NULL;
   }
   p=head;
   while (p!=NULL)
   {
   	x=((p->k)/radix)%10;
   	if (h[x].next==NULL)
   	{
   		h[x].next=p;
   		t[x].next=p;
   	}
   	else
   	{
   		q=t[x].next;
   		q->next=p;
   		t[x].next=p;
   	}
   	p=p->next;
   }

   j=0;
   while (h[j].next==NULL)
    j++;
    head=h[j].next;
    q=t[j].next;
    for (x=j+1;x<=9;x++)
    if (h[x].next!=NULL)
    {
    	q->next=h[x].next;
    	q=t[x].next;
    }
    q->next=NULL;
    radix*=10;
    printf("\n---------------------\n");
    }
    return head;
}
void my_free(lnode h)
{
	lnode temp=h;
	while (temp)
	{
		h=temp->next;
		free(temp);
		temp=h;
	}
}
void main()
{
	lnode h;
	int d;
	clrscr();
	h=my_input(&d);
	puts("The sequence you input is:");
	my_output(h);
	h=Radix_Sort(h,d);
	puts("\nThe sequence after radix_sort is:");
	my_output(h);
	my_free(h);
	puts("\n Press any key to quit...");
	getch();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程与实战

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值