输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等

各种错误 2014-04-04 11:03:32
#include <stdio.h>
int main()
{ int a[100],b,c,n,k,i,t;
while(scanf("%d",&n)!=EOF)
{
for(b=0;b<n;b++)
{
scanf("%d",&a[b]);
}
for(c=0;c<n-1;c++)
{
k=c;
for(i=c+1;i<n;i++)
{
if(a[k]*a[k]>a[i]*a[i])
k=i;
if(k!=c)
{
t=a[c];
a[c]=a[k];
a[k]=t;
}
}

}
for(c=n-1;c>=0;c--)
{
printf("%d ",a[c]);
}
printf("\n");
}
return 0;
}
运用选择排序,不知道为什么,输入3 1 0 -1时,排不成1 -1 0这种样子。求高手指点
...全文
11458 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
庄鱼 2014-04-06
  • 打赏
  • 举报
回复
#include <stdio.h>
int main()
{ int a[100],b,c,n,k,i,t,t1,t2; //------------------------------------
  while(scanf("%d",&n)!=EOF)
  {
    for(b=0;b<n;b++)
    {
      scanf("%d",&a[b]);
    }
 for(c=0;c<n-1;c++)
    {
       k=c;
       for(i=c+1;i<n;i++)
      // {                                        //-------------------------------
           if((t1=a[k]*a[k])>(t2=a[i]*a[i])||t1==t2&&a[k]>a[i])  //-----------------------
            k=i;
           if(k!=c)
           {
               t=a[c];
               a[c]=a[k];
               a[k]=t;
           }
      // }  //----------------------------------
    }
    for(c=n-1;c>=0;c--)
    {
    printf("%d ",a[c]);
    }
    printf("\n");
  }
  return 0;
}
HardWoodnx 2014-04-05
  • 打赏
  • 举报
回复 1
选择排序,值交换应该发生在全部数据比较完成一次以后。也即你的代码 if(k!=c) { t=a[c]; a[c]=a[k]; a[k]=t; } 要放到 for(i=c+1;i<n;i++) {} 外边来,而不是内部
farmliver 2014-04-05
  • 打赏
  • 举报
回复

#include <stdio.h>
int main()
{
	int a[100],b,c,n,k,i,t;
	while(scanf("%d",&n) != EOF)
	{
		for(b = 0; b < n; b++)
		{
			scanf("%d", &a[b]);
		}

		for(c = 0; c < n-1; c++)
		{
			k = c;
			for(i = c + 1; i < n; i++)
			{
				if(a[k] > a[i])
				{
					k = i;
				}
				if(k != c)
				{
					t = a[c];
					a[c] = a[k];
					a[k] = t;
					k = c;
				}
			}

		}
		for(c = n-1; c >= 0; c--)
		{
			printf("%d ",a[c]);
		}
		printf("\n");
	}
	return 0;
}

33,324

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧