简单C语言问题求解?

来源:百度知道 编辑:UC知道 时间:2024/05/25 06:30:45
程序是将10个国家的英文名字按字母由小到大的顺序排列并输出,程序设计如下:
#include<string.h>
sort(char *name[],int n)
{
char *temp;
int i,j,k;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp(name[k],name[j])>0) k=j;
if(k!=i)
{
temp=name[i];name[i]=name[k];name[k]=temp;
}
}
}
main()
{
int n=10,i;
char *name[]={"China","America","France","Britain","Canada","Australia","Switzerland","Japan","Italy","Germany"};
sort(name,n);
for(i=0;i<n;i++)
printf("%s;",name[i]);
}
程序是正确的,运行也没错,但偶还是有些不明白,请高手给点注释,特别是这一句:
if(k!=i)
{
temp=name[i];name[i]=name[k];name[k]=temp;
}
在此谢过!
为什么name[i]与name[k]的值需要交换?
if(k!=i)如何解释?

就是把name[i]中的值赋给name[k]
交换是为了把每轮循环相邻的俩字符的最大字符串找出,也就是排序
k!=i是因为:如果k=i,完全可以进行下一轮循环。

这是典型的“气泡法”,相邻的两个进行比较,进行多次循环,多次比较相邻的两个国家名字的大小。若符合条件,就进行交换。

把name[i]和name[k]的值进行交换