#include
int main(void){
int n,a[10],i,j,t,index;
printf("Input n: ");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for (i=0;i<n;i++){
index=i;
for(j=1;j<n;j++){
if (a[j]<a[index])
index=j;
a[index]=t;
a[index]=a[i];
a[i]=t;}}
printf("After:");
for (i=0;i<n;i++)
printf("%d",&a[i]);
return 0 ;}
代码应该为以下
#include
int main(void)
{
int n,a[10],i,j,t,index;
printf("Input n: ");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for (i=0;i<n;i++)
{
index=i;
for(j=1;j<n;j++){
if (a[j]<a[index])
{
index=j;
a[index]=t;
a[index]=a[i];
a[i]=t;
}
}
}
printf("After:");
for (i=0;i<n;i++)
printf("%d",&a[i]);
return 0 ;
}
if (a[j]<a[index])
后面缺少花括号
a[index]=t; a[index]=a[i]; a[i]=t;
*你这个交换的结果是什么?t的值是哪里来的?试了试,代码还有问题,改成这个试试
#include
int main(void)
{
int n,a[10],i,j,t;
printf("Input n: ");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for (i=0;i<n;i++)
{
for(j=i+1;j<n;j++){
if (a[j]<a[i])
{
t=a[i]
a[i]=a[j];
a[j]=t;
}
}
}
printf("After:");
for (i=0;i<n;i++)
printf("%d",&a[i]);
return 0 ;
}
a[index]=t;
a[index]=a[i];
a[i]=t;
这部分交换两个变量的错了,第一行应该是t=a[index]
最后的printf("%d",&a[i]);你应该是想输出a[i]吧,不要加"&"。
CSDN首答,不知道为什么你的代码给我一种不太像选择排序的感觉,选择排序不是选出当前候选集最小(大)的数,然后交换么?
#include
int main(void){
int n,a[10],i,j,t,index;
printf("Input n: ");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for (i=0;i<n;i++){
index=i;
for(j=i+1;j<n;j++){//下标号是随i值而浮动的
if (a[j]<a[index])
index=j;
}//找出当前最小数的下标
if(index!=i)//如果和i不等,则交换
{
t=a[index];
a[index]=a[i];
a[i]=t;
}
}
printf("After:");
for (i=0;i<n;i++)
printf("%d ",a[i]);//多加一个空格,增强可读性,去掉&
return 0 ;
}
代码风格丑丑的。。。
选择排序是最基础的排序,是需要熟练掌握的。http://c.biancheng.net/cpp/html/2442.html