#include<stdio.h>
/**
* created by:shishuai
* QQ:641542616
* 函数功能:对多组相同位数的数字字符数组进行排序
* 函数实现方法:基数排序
* 时间复杂度:O(n)
* 参数n:待排序的数字字符数组的位数
* 参数(*a)[n]:待排序的数字字符数组
* 参数p:待排序的起始数组
* 参数q:待排序的终止数组
*/
void base_sort(int n,char (*a)[n],int p,int q);
/**
* 函数简单示例
* 输入:m行,第一行包括两个数,m:数组个数,n:数组位数.以下m行分别为待排序m个的数组
*/
int main(void){
int m,n;
scanf("%d%d",&m,&n);
char a[m][n],c;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
while((c=getchar())==' '||c=='\n')
continue;
a[i][j]=c;
}
}
base_sort(n,a,0,m-1);
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
printf("%c",a[i][j]);
}
printf("\n");
}
return 0;
}
/**
* 函数实现
*/
void base_sort(int n,char (*a)[n],int p,int q){
char b[10][q-p+1][n];
int d[10]={0,0,0,0,0,0,0,0,0,0};
for(int i=n-1;i>=0;i--){
for(int j=p;j<=q;j++){
for(int k=0;k<n;k++)
b[a[j][i]-'0'][d[a[j][i]-'0']][k]=a[j][k];
d[a[j][i]-'0']++;
}
int h=0;
for(int j=0;j<10;j++){
for(int k=0;k<d[j];k++){
for(int l=0;l<n;l++)
a[p+h][l]=b[j][k][l];
h++;
}
d[j]=0;
}
}
}
数字字符串的基数排序
最新推荐文章于 2021-05-17 02:58:09 发布