C语言指针数组问题,不是很复杂的。帮忙理解。

来源:百度知道 编辑:UC知道 时间:2024/05/11 16:32:47
#include"string.h"
#include"stdio.h"
void main()
{
void sort(char *name[],int n);
void print(char *name[],int n);
char *name[]={"Follow me","BASIC","Great Wall","FORTRAN","Computer design"};
int n=5;
sort(name,n);
print(name,n);
}
void 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;}
}
}
void print(char *name[],int n)
{
int i;
for(i=0;i<n;i++)
printf("%s\n",name[i]);
}

那个k=i,和if(k!=i那里不大明白,高手解释一下

刚开始i=0,第一个k=i,把i赋给k,k=0.
k!=i前面不是还有一句
if(strcmp(name[k],name[j])>0) k=j;
比较name[0]和name[1],
一,如果name[0]大于name[1]
k就等于j,也就是说k=1;
那样k就不等于i了撒……
所以又来一句
k!=i
就是说
如果name[0]大于name[1]
就交换位置。
二,如果如果name[0]不大于name[1]
那就不用把j赋给k,这样j就还是等于i值的,就不用交换位置啦

其实我是新手,写的是自己的一点看法,要是不好也不用骂哈。。就当看个笑话吧

这其实就是冒泡排序的一种变化。。
首先i记录下它要匹配的字符(k=i),之后j从i之后开始寻找,假如之后的字符大于第i个字符则(k=j),这时就k不等于i了。。即前一个大于后一个了。。就交换。。
其实不用那些也是可以的!
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(strcmp(name[k],name[j])>0)
{temp=name[i];name[i]=name[k];name[k]=temp;}
也是一样的!