Description
用低位优先基数排序对下列字符串进行排序。
Input
输入包含两行,第一行为列表中元素个数n,第二行为列表中的元素。
本题列表中的元素都是包含三个字母的英文单词。
Output
1.输出排序后的字符串序列。
2.中间用空格隔开。
3.末尾不得有空格。
#include<iostream>
using namespace std;
#include<string.h>
int getDigit(char x)
{
int y;
return (int)x-97;
}
void sortArr(string s[],int N)
{
int count[100]; //每个桶里的单词数量
string t[25][100]; //每个桶里的单词
int k,i,j,num,p,q;
for (i=0;i<3;i++)
{
memset(count, 0, sizeof(count));
//memset函数为初始化函数,可以将一段连续的内存初始化为某个值。但它是以字节为单位进行初始化的。memset(首地址,值,sizeof(地址总大小));
for (j=0;j<N;j++)
{
num=getDigit(s[j][2-i]);
count[num]++;
k=count[num]-1;
t[num][k]=s[j];
}
q=0;
for (j=0;j<26;j++)
{
for (p=0;p<count[j];p++)
{
s[q]=t[j][p];
q++;
}
}
}
}
int main()
{
int i,N;
string s[100];
cin>>N;
for (i=0;i<N;i++)
{
cin>>s[i];
}
sortArr(s,N);
for (i=0;i<N;i++)
{
if (i<N-1)
{
cout<<s[i]<<" ";
}
else
{
cout<<s[i];
}
}
return 0;
}
Input
9
dog cat pig cow fox rat bee ant bat
Output
ant bat bee cat cow dog fox pig rat