当前位置: 代码迷 >> C语言 >> [求助] 把一个数插入一个已经从小到大排列好的数列中
  详细解决方案

[求助] 把一个数插入一个已经从小到大排列好的数列中

热度:407   发布时间:2006-11-29 23:34:00.0
[求助] 把一个数插入一个已经从小到大排列好的数列中
#include <stdio.h>
#define SIZE 3
void arr(int former[],int n,int now[],int a)
{
int m,t;
int i=0;
while(a>former[i])
i++;
if(a<former[i])
a=now[i+1];
t=n+1;
for(m=n;m>i+1;m--,t--)
former[n-1]=now[n];
}
void main()
{
int a,i;
int former[SIZE];
int now[SIZE+1];
scanf("%d",&a);
for(i=0;i<SIZE;i++)
scanf("%d",&former[i]);
arr(former,SIZE,now,a);
for(i=0;i<=SIZE;i++)
printf("%d",now[i]);
}
希望帮我找一下错误。谢谢!
搜索更多相关的解决方案: 从小到大  排列  

----------------解决方案--------------------------------------------------------
以下是引用kailun在2006-11-29 23:34:00的发言:
#include <stdio.h>
#define SIZE 3
void arr(int former[],int n,int a)
{
int i=0,j;
while(a>former[i])
i++; //用二分法查找更快
for(j=i;j<n;j++)
former[j+1]=former[j]; //往后延一位
former[i]=a;
}
void main()
{
int a,i;
int former[SIZE+1];
scanf("%d",&a);
for(i=0;i<SIZE;i++)
scanf("%d",&former[i]);
arr(former,SIZE,a);
for(i=0;i<=SIZE;i++)
printf("%d",former[i]);
getch();
}
希望帮我找一下错误。谢谢!


----------------解决方案--------------------------------------------------------
for(j=i;j<n;j++)

会被覆盖阿
for(j=n;j>i ; j --)
former[j+1]=former[j]; 我觉得应该是这样 呵呵
----------------解决方案--------------------------------------------------------
嗯,是啊!不好意思。而且应该从j=n-1开始,到j〉=i

[此贴子已经被作者于2006-11-30 14:03:20编辑过]



----------------解决方案--------------------------------------------------------
回复:(Welton)嗯,是啊!不好意思。而且应该从j=n-...

好像还是RUN不出来。你用的是Microsoft Visual C++ 6.0吗?我用的是这个。


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

#include <stdio.h>
#define SIZE 3
void arr(int former[],int n,int a)
{
int i=0,j;
while(a>former[i])
i++;
for(j=n;j>=i ; j --) //*这里一点点变化*//
former[j+1]=former[j];
former[i]=a;
}
void main()
{
int a,i;
int former[SIZE+1];
scanf("%d",&a);
for(i=0;i<SIZE;i++)
scanf("%d",&former[i]);
arr(former,SIZE,a);
for(i=0;i<=SIZE;i++)
printf(" %d",former[i]);
getch();
}

[此贴子已经被作者于2006-11-30 19:54:25编辑过]


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

我做了简单的修改,我运行了好使的,你可以试试:
#include <stdio.h>
#define SIZE 3
void arr(int former[],int now[],int a)
{
int m;
int i=0;
for(i=0,m=0;a > former[i] && i<SIZE;i++,m++)
now[m] = former[i];
if(i == SIZE)
now[m] = a;
else {
now[m] = a;
while(i<SIZE && m<SIZE+1)
now[++m] = former[i++] ;
}

}

void main()
{
int a,i;
int former[SIZE];
int now[SIZE+1];
printf("请输入一个数:");
scanf("%d",&a);
printf("请输入三个数:");
for(i=0;i<SIZE;i++)
scanf("%d",&former[i]);
printf("\n");
arr(former,now,a);
for(i=0;i<=SIZE;i++)
printf("%d ",now[i]);
}


----------------解决方案--------------------------------------------------------
建议你换一个编译器,可以试一试CFREE4.0,我现在用CFREE4.0挺好用的而且运行起来也很快,
http://www.programarts.com/cfree_ch/download.htm在这个网站可以下到的
----------------解决方案--------------------------------------------------------

谢谢上面的大哥


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

七楼的兄弟阿:我记得数组是不能用变量的阿。


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