主题:[讨论]新手急求解答
wolf赵帅
[专家分:70] 发布于 2010-10-30 21:43:00
#include<stdio.h>
main()
{ void sort(int x[],int n);
int i,*p,a[5];
p=a;
for(i=0;i<5;i++)
scanf("%d",p++);
p=a;
sort(p,5);
for(p=a,i=0;i<5;i++)
{ printf("%4d",*p);
p++;
}
printf("\n");
}
void sort(int x[],int n)
{int i,j,t,k;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(x[j]>x[i]) k=j;
if(k!=i)
{t=x[i];x[i]=x[k];x[k]=t;}
}
}
为什么要有if(k!=i)
{t=x[i];x[i]=x[k];x[k]=t;}
小弟是一新手 急求解答
回复列表 (共2个回复)
沙发
kirs [专家分:190] 发布于 2010-10-31 03:53:00
void sort(int x[],int n)
{int i,j,t,k;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)//将i后最大的数的位置用k标记,即x[k]为最大的数。
if(x[j]>x[i]) k=j;
if(k!=i)//如果x[k]==x[i],则不替换,因为该函数就是用后面的大数与前面的较小的数替换,使数组从大到小排列
{t=x[i];x[i]=x[k];x[k]=t;}
}
}
板凳
茶竹论道 [专家分:40] 发布于 2010-11-03 15:16:00
for(j=i+1;j<n;j++)//将i后最大的数的位置用k标记,即x[k]为最大的数。
if(x[j]>x[i]) k=j;
if(k!=i)//如果x[k]==x[i],则不替[url=http://www.shenggang.com]磁力泵[/url]因为该函数就是用后面的大数与前面的较小的数替换,使数组从大到小排列
{t=x[i];x[i]=x[k];x[k]=t;}
]
我来回复