题目描述
由键盘任意输入10个学生的姓名(以拼音形式),将它们按照ASCⅡ码的顺序从小到大排序
输入
10个学生的姓名(以拼音形式)。
输出
按照ASCⅡ码的顺序从小到大排序。
样例输入
ziang zaang zbang zcang zdang zeang zfang zgang zhang zhang
样例输出
zaang zbang zcang zdang zeang zfang zgang zhang zhang ziang
题目分析
方法一:
利用冒泡排序。
基本的冒泡排序必须会写。不会写的请参考我的视频链接。
需要注意的是 这里对字符串不能直接进行赋值,需要用到strcpy(a,b)将b字符数组中的字符拷贝给a。
其它与一般的冒泡排序都一样
代码实现:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<stdbool.h>
int main()
{
char a[11][1000];
for(int i=0;i<10;i++)
{
scanf("%s",a[i]);
}
for(int i=0;i<9;i++)
{
for(int j=0;j<10-i-1;j++)
{
if(strcmp(a[j],a[j+1])>0)
{
char b[100];
strcpy(b,a[j]);
strcpy(a[j],a[j+1]);
strcpy(a[j+1],b);
}
}
}
for(int i=0;i<10;i++)
{
printf("%s\n",a[i]);
}
return 0;
}
运行结果:
方法二:
利用stdlib库中的qsort函数,不清楚其排序过程的也可看视频链接。
qsort(a,n,sizeof(a[0]),cmp)
a代表排序数组的首地址,n代表元素个数,sizeof(a[0])代表每个元素的所占字节数,cmp为自定义的比较函数。记得引入stdlib.h头文件。
代码实现:
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
int cmp(const void *a,const void *b)
{
return strcmp((char*)a,(char*)b);
}
int main()
{
char a[11][1000];
for(int i=0;i<10;i++)
{
gets(a[i]);
}
qsort(a,10,sizeof(a[0]),cmp);
for(int i=0;i<10;i++)
{
printf("%s\n",a[i]);
}
return 0;
}
运行结果:
欢迎批评指正!