小弟不知下面这句为什么? (C语言中数组) if(k!=i){t=a[i];a[i]=a[k];a[k]=t;},为什么还要判断

/*任意读入10个整数,将其用选择法按升序排列后输出*/
#include<stdio.h>
#define n 10
main()
{
int a[n],i,j,k,t;

for(i=0;i<n;i++)
scanf("%d",&a[i]);//将十个数存到数组中
for(i=0;i<n-1;i++)//处理n-1趟
{k=i; /*用k记住数组i的下标*/
for(j=i+1;j<n;i++)
if(a[j]<a[k]) k=j;
if(k!=i){t=a[i];a[i]=a[k];a[k]=t;}

}
for(i=0;i<n;i++)
printf("%d\n",a[i]);
}

if(k!=i){t=a[i];a[i]=a[k];a[k]=t;}
上面语句的功能是交换k和i的值,
那么如果k和i的值相等的话,就不进行交换操作了,
判断的目的,是为了不做无用功,可以节省时间和计算机资源。

ps:如果某个程序计算量较大的话,合理的判断,还可以省电的。 低碳啊,亲!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-23
for(j=i+1;j<n;i++)
if(a[j]<a[k]) k=j; 这里如果a[j]>a[k ] k==i 所以不能进行下面的交换
if(k!=i){t=a[i];a[i]=a[k];a[k]=t;}
第2个回答  2012-10-23
当然可以不判断,问题是不判断就是自己跟自己交换,没这个必要,因此可以省略与自己交换的情况,所以在前面判断
相似回答