c语言选择排序,我哪儿错了?
# include<stdio.h>
void main()
{
int a[11],i,j,k,x;
printf("input 10 numbers:\n");
for(i=1;i<11;i++)
scanf("%d",&a[i]);
printf("\n");
for(i=1;i<10;i++)
{
k=1;
for(j=k+1;j<10;j++)
if(a[i]<=a[k])
k=j;
if(i!=k)
{
x=a[i];
a[i]=a[k];
a[k]=x;
}
}
printf("the sorted numbers:\n");
for(i=1;i<11;i++)
printf("%d,\n",a[i]);
printf("\n");
}
答案:# include<stdio.h>
void main()
{
int a[11],i,j,k,x;
printf("input 10 numbers:\n");
for(i=1;i<11;i++)
scanf("%d",&a[i]);
printf("\n");
k=1;
for(i=1;i<11;i++)
{
k=i;
for(j=k+1;j<11;j++)
{
if(a[j]<=a[k])
k=j;
}
if(i!=k)
{
x=a[i];
a[i]=a[k];
a[k]=x;
}
}
printf("the sorted numbers:\n");
for(i=1;i<11;i++)
printf("%d,\n",a[i]);
printf("\n");
getchar();
}
每次比较,对于比较过的就不要再比较了,否则顺序就乱了。
其他:第一个输入数据就错了,数组下标应该是0-10! i应该从0开始,而不是1! 有4个错*所在语句
for(i=1;i<11;i++)*
{
k=i;*
for(j=k+1;j<11;j++)*
if(a[j]<=a[k])* 数组下标是从0开始的,所以for语句循环的i应该也是从0开始,改为for(i=0;i<10;i++)之后饿循环也应该从0开始。另外当i循环到第2个后面时,你j=k+1还是从第二个开始比较,这样的话你把前面筛选出来的又重新拿去比较,肯定会产生错误!应改为j=i+1,这样每次都是从筛选后剩下的互相比较!
谢谢,希望能对您有帮助 我觉得你是想选出最小的,跟最后一个数组元素交换,然后依次类推:
#include <stdio.h>
main()
{
int i,j,k;
int asd[10]=;
int temp;
for (i=0;i<9;i++)
{
for(j=k=0;j<=9-i;j++)
{
if(asd[k]>asd[j])
{
k=j;
}
}
temp=asd[9-i];
asd[9-i]=asd[k];
asd[k]=temp;
}
for (i=0;i<10;i++)
{
printf("%d\n",asd[i]);
}
}
# include<stdio.h>
void main()
{
int a[11],i,j,k,x;
printf("input 10 numbers:\n");
for(i=0;i<11;i++)
scanf("%d",&a[i]);
printf("\n");
for(i=0;i<11;i++)
{
k=1;
for(j=k+1;j<10;j++)
if(a[i]<=a[k])
k=j;
if(i!=k)
{
x=a[i];
a[i]=a[k];
a[k]=x;
}
}
printf("the sorted numbers:\n");
for(i=1;i<11;i++)
printf("%d,\n",a[i]);
printf("\n");
}
上一个:c语言二维数组用指针输出的问题,以及100-200间的素数输出,填空题
下一个:跪求:谭浩强的《C语言程序设计》在哪下载啊,第二还有第三版有啥区别 各位大侠帮帮忙,谢谢!