不想用链表就用数组做了,浪费了很多的空间
代码看似很长其实很简单
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int divid(int number, int i);
int arrangeinput(char *initial, int *number);
int main()
{
char initial[100];
int amount;
int number[50]={-1};
int bucket0[20]={-1};
int bucket1[20]={-1};
int bucket2[20]={-1};
int bucket3[20]={-1};
int bucket4[20]={-1};
int bucket5[20]={-1};
int bucket6[20]={-1};
int bucket7[20]={-1};
int bucket8[20]={-1};
int bucket9[20]={-1};
int pass;
int remain=0;
int REMAIN=0;
scanf("%s,",initial);
amount=arrangeinput(initial,number);
//将桶初始化//
for(int i=0;i<20;i++)
{
bucket0[i]=-1;
bucket1[i]=-1;
bucket2[i]=-1;
bucket3[i]=-1;
bucket4[i]=-1;
bucket5[i]=-1;
bucket6[i]=-1;
bucket7[i]=-1;
bucket8[i]=-1;
bucket9[i]=-1;
}
scanf("%d",&pass);
for(int i=0;i<pass;i++)//进行pass次移动//
{
for(int p=0;p<amount;p++)
{
remain=divid(number[p],i);
if(remain==0)
{
for(int b=0;b<20;b++)
{
if(bucket0[b]==-1)
{
bucket0[b]=number[p];
break;
}
}
}
else if(remain==1)
{
for(int b=0;b<20;b++)
{
if(bucket1[b]==-1)
{
bucket1[b]=number[p];
break;
}
}
}
else if(remain==2)
{
for(int b=0;b<20;b++)
{
if(bucket2[b]==-1)
{
bucket2[b]=number[p];
break;
}
}
}
else if(remain==3)
{
for(int b=0;b<20;b++)
{
if(bucket3[b]==-1)
{
bucket3[b]=number[p];
break;
}
}
}
else if(remain==4)
{
for(int b=0;b<20;b++)
{
if(bucket4[b]==-1)
{
bucket4[b]=number[p];
break;
}
}
}
else if(remain==5)
{
for(int b=0;b<20;b++)
{
if(bucket5[b]==-1)
{
bucket5[b]=number[p];
break;
}
}
}
else if(remain==6)
{
for(int b=0;b<20;b++)
{
if(bucket6[b]==-1)
{
bucket6[b]=number[p];
break;
}
}
}
else if(remain==7)
{
for(int b=0;b<20;b++)
{
if(bucket7[b]==-1)
{
bucket7[b]=number[p];
break;
}
}
}
else if(remain==8)
{
for(int b=0;b<20;b++)
{
if(bucket8[b]==-1)
{
bucket8[b]=number[p];
break;
}
}
}
else if(remain==9)
{
for(int b=0;b<20;b++)
{
if(bucket9[b]==-1)
{
bucket9[b]=number[p];
break;
}
}
}
}
//将原本存储的数据清空//
for(int q=0;q<amount;q++)
{
number[q]=-1;
}
int c=0,a=0;
while(bucket0[c]!=-1)
{
number[a]=bucket0[c];
c++;
a++;
}
c=0;
while(bucket1[c]!=-1)
{
number[a]=bucket1[c];
c++;
a++;
}
c=0;
while(bucket2[c]!=-1)
{
number[a]=bucket2[c];
c++;
a++;
}
c=0;
while(bucket3[c]!=-1)
{
number[a]=bucket3[c];
c++;
a++;
}
c=0;
while(bucket4[c]!=-1)
{
number[a]=bucket4[c];
c++;
a++;
}
c=0;
while(bucket5[c]!=-1)
{
number[a]=bucket5[c];
c++;
a++;
}
c=0;
while(bucket6[c]!=-1)
{
number[a]=bucket6[c];
c++;
a++;
}
c=0;
while(bucket7[c]!=-1)
{
number[a]=bucket7[c];
c++;
a++;
}
c=0;
while(bucket8[c]!=-1)
{
number[a]=bucket8[c];
c++;
a++;
}
c=0;
while(bucket9[c]!=-1)
{
number[a]=bucket9[c];
c++;
a++;
}
c=0;
//将桶中的数据存储到数组里,再将桶清空用于下一次的radix sort//
for(int l=0;l<20;l++)
{
bucket0[l]=-1;
bucket1[l]=-1;
bucket2[l]=-1;
bucket3[l]=-1;
bucket4[l]=-1;
bucket5[l]=-1;
bucket6[l]=-1;
bucket7[l]=-1;
bucket8[l]=-1;
bucket9[l]=-1;
}
}
for(int i=0;i<amount;i++)
{
printf("%d,",number[i]);
}
return 0;
}
//返回个位、十位、百位数//
int divid(int number, int i)
{
int temp;
int remaindder=0;
temp=number/(pow(10,i));
remaindder=temp%10;
return remaindder;
}
//将输入转成整数型存储进去//
int arrangeinput(char *initial, int *number)
{
int length;
int amount=0;
int sum=0;
int j=0;
length=strlen(initial);
for(int i=0;i<length;i++)
{
if(initial[i]==',')
{
amount++;
}
}
for(int i=0;i<amount;i++)
{
if(initial[j]=='\n'||initial[j]=='\0')
{
break;
}
if(initial[j]==',')
{
j++;
}
while(initial[j]!=','&&initial[j]!='\0')
{
sum=sum+initial[j]-'0';
sum=sum*10;
j++;
}
sum=sum/10;
number[i]=sum;
sum=0;
}
return amount;
}