当前位置:编程学习 > C/C++ >>

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语言程序设计》在哪下载啊,第二还有第三版有啥区别 各位大侠帮帮忙,谢谢!

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,