当前位置: 代码迷 >> C语言 >> 按从大到小排列求助
  详细解决方案

按从大到小排列求助

热度:114   发布时间:2006-06-25 14:25:45.0
按从大到小排列求助

我想按从大到小排出被输入的十个数,可怎么也不成功啊,请高人指教。


#include<stdio.h>
#define P printf
#define S scanf

void main()
{
int a[10],i,j,t;
int max,min;

P("please input ten integers:");
for(i=0;i<10;i++)
{
S("%d",&a[i]);
}
max=min=a[0];
for(i=0;i<10;i++)
{
for(j=i+1;j<10;j++)
{
if(a[j]>a[i])
t=max;
max=a[j];
a[j]=t;
}
printf("%d ",max);

}
}

结果是这样:
please input ten integers:1 2 3 4 5 6 7 8 9 10
10 9 8 8 8 8 8 8 8 8 Press any key to continue...
好郁闷啊

搜索更多相关的解决方案: 排列  

----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽

2006-06-25 08:17:45
huangtaomvp

等 级:新手上路
帖 子:31
专家分:0
注 册:2006-4-23
  得分:0 

void main()
{
int a[10],i,j,t;
int max,min;

P("please input ten integers:");
for(i=0;i<10;i++)
S("%d",&a[i]);
for(i=0;i<10;i++)
for(j=i+1;j<10;j++)
if(a[j]>a[i])
{ t=a[i];
a[i]=a[j];
a[j]=t;}
for(i=0;i<10;i++)
P("%d, ",a[i]);
}你好像把排序的方法弄错了哦..............


----------------解决方案--------------------------------------------------------

其实max=min=a[0]这一句就是错误!

没有这么赋值的


----------------解决方案--------------------------------------------------------
可以
----------------解决方案--------------------------------------------------------


每走一遍内循环后你的数组已经乱了套

[此贴子已经被作者于2006-6-25 18:18:15编辑过]


----------------解决方案--------------------------------------------------------
走完第二个循环后,以后的循环内的内容永远不会被执行
没走时的循环:1 2 3 4 5 6 7 8 9 10
第一个循环后:1 1 2 3 4 5 6 7 8 9
第三个循环后:1 1 10 2 3 4 5 6 7 8
a[2]永远不小于a[j]
----------------解决方案--------------------------------------------------------

有的编译器可以这样赋值.C++提供这样的赋值方法.
楼主似乎不是在做排序.如果是每次取最大值的话,应该将每次找的最大值打印后,赋一个最小值(比如-32767).这样遍历可以显示排序.但真正不是排序.
楼主应该去看看各种排序的编程思想,理解一下,可以知道自己错哪的.


----------------解决方案--------------------------------------------------------

//冒泡排序
#include<stdio.h>
main()
{int i,j,temp,n,a[100],flag=1;
printf("请问你要输入几个排序数:\n");
scanf("%d",&n);
printf("请输入你要排序的数值:\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n&&flag==1;i++)
{ flag=0;
for(j=1;j<n-i;j++)
if(a[j]<a[j-1])
{ flag=1;
temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
}
}
printf("排序后的:\n");
for(i=0;i<n;i++)
printf("%d\t",a[i]);
}


----------------解决方案--------------------------------------------------------
//选择排序
#include<stdio.h>
main()
{int a[100], min,i,k,temp,j,cout;
printf("请问你要输入几个数字(不要超过100个!!):\n");
scanf("%d",&cout);
printf("请输入数字:\n");
for(i=0;i<cout;i++)
scanf("%d",&a[i]);
for(i=0;i<cout;i++)
{
min=i;
for(k=i+1;k<cout;k++)
{
if(a[min]>a[k])
{
min=k;

}

}if(i!=min)
{
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
}
for(j=0;j<cout;j++)
printf("%d\t",a[j]);
}

----------------解决方案--------------------------------------------------------
  相关解决方案