问题描述
- 麻烦看看这个程序为什么不能选择排序
-
#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 ;
}
解决方案二:
试了试,代码还有问题,改成这个试试
#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 ;
}
解决方案三:
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 ;
}
代码风格丑丑的。。。
解决方案四:
if (a[j]<a[index])
后面缺少花括号
解决方案五:
- 1.
a[index]=t;
a[index]=a[i];
a[i]=t;
*你这个交换的结果是什么?t的值是哪里来的? - 2.你的j循环每次都从1开始,那么每次都是选出了最小的数(从1开始),所以每次选出的都是同一个数
解决方案六:
a[index]=t;
a[index]=a[i];
a[i]=t;
这部分交换两个变量的错了,第一行应该是t=a[index]
最后的printf("%d",&a[i]);你应该是想输出a[i]吧,不要加"&"。
解决方案七:
选择排序是最基础的排序,是需要熟练掌握的。http://c.biancheng.net/cpp/html/2442.html
时间: 2024-11-01 14:01:34