当前位置: 代码迷 >> C语言 >> 看看````
  详细解决方案

看看````

热度:586   发布时间:2007-08-25 00:23:23.0
看看````

输入五个数字,从小到大排序,排序好了然后再提示输入一个数字,重新排序!~~我已写好一种办法```有没有其他更好的办法??
#include<stdio.h>
#define N 5
#define Z 6
void main()
{
int i,num[Z],t,k,p=0;
char yorn;

printf("请输入%d个数字:\n",N);

for(i=0;i<N;i++)//此循环是用来输入N个数的
{
scanf("%d",&num[i]);
}

for(k=0;k<N-1;k++)//此嵌套循环运用冒泡排序排列数字
{
for(i=0;i<N-1-k;i++)
{
if(num[i]<num[i+1])
{
t=num[i];
num[i]=num[i+1];
num[i+1]=t;
}
}

}
printf("\n排序后:\n");

for(i=0;i<N;i++)//此循环为了显示排序后的数字
{
printf("%d\n",num[i]);
}

printf("\n是否要插入一个数(y or n):\n");
fflush(stdin);
scanf("%c",&yorn);
if (yorn!='y' && yorn!='n')//此if语句询问是否要插入一个数字
printf("输入错误,请输入y或者n!!!");
else if(yorn=='y')//选择y插入数字,否则退出程序
{
printf("请插入一个数:");
scanf("%d",&p);

for(i=0;i<N;i++)/*因为之前的数字已排列好,所以通过将插入的数字按顺序与他们进行比较
就可以得出该插入的数字应该插在哪个地方*/

{
if(p>num[i])
break;
}
for(k=N;k>i;k--)/*当已经找出插入位置,该循环可以使其位置以及后面的数字往后移动
使得该数可以从适当的位置插入*/

{
num[k]=num[k-1];
}
num[i]=p;

printf("\n插入后再排序:\n");
for(i=0;i<Z;i++)
{
printf("%d\n",num[i]);
}
}
else
printf("\n\n\n\n");


}

搜索更多相关的解决方案: num  数字  define  void  

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

初步看来,用折半查找后插入即可~~~~~~~~~~~


----------------解决方案--------------------------------------------------------
回复:(mcy_baby)看看````
首先你的程序是从大到小。不合题,不过关系不大。考试时就不一样啦。。。。。。
----------------解决方案--------------------------------------------------------

#include<stdio.h>
main()
{
int a[80],i,j,key,n,t;
key=t=0;
for(i=0;i<5;i++){
scanf("%d",&a[i]);
}

for(i=0;i<5;i++){
for(j=0;j<4;j++){
if(a[j]>a[j+1]){
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
scanf("%d",&n);
for(i=0;i<5;i++){
if(n<a[i]){
key=i;
break;
}
}
for(i=0;i<key;i++){
printf("%d ",a[i]);
}
printf("%d ",n);
for(i=key;i<5;i++){
printf("%d ",a[i]);
}
}



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