C语言:已有一个升序的整型数组,要求输入一个整数后,按原来排序的规律将它插入数组中。 请问哪错了
答案:3 悬赏:0 手机版
解决时间 2022-01-01 04:23
- 提问者网友:兔牙战士
- 2021-12-31 09:05
#include "stdio.h"
int main()
{
int n,m,i=1,j,a[1127];
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&m);
for(i=1;i<=n;i++)
{
if(a[i]>=m);
{
for(j=n;j>=i;j--)
{
a[j+1]=a[j];
}
a[i]=m;
}
}
for(i=1;i<=n+1;i++)
printf("%d ",a[i]);
return 0;
}
拜托拜托
最佳答案
- 五星知识达人网友:野味小生
- 2021-12-31 09:37
这句if(a[i]>=m); 这样判断不对,因为比m大的数可能是多个的,这样判断不出把m放在哪个位置。而且这句后面显然是想在后面加{}来包括整段的,所以不要分号了,放了分号表示这句已经结束,直接这样修改:
if(a[i]<=m && a[i+1]>=m)
{
for(j=n;j>=i;j--)
{
a[j+1]=a[j];
}
a[i]=m;
}
还有最后的输出这段循环要加上{}:
for(i=1;i<=n+1;i++)
{
printf("%d ",a[i]);
return 0;
}
if(a[i]<=m && a[i+1]>=m)
{
for(j=n;j>=i;j--)
{
a[j+1]=a[j];
}
a[i]=m;
}
还有最后的输出这段循环要加上{}:
for(i=1;i<=n+1;i++)
{
printf("%d ",a[i]);
return 0;
}
全部回答
- 1楼网友:孤老序
- 2021-12-31 10:30
朋友,你的这个问题有基本的二种方法,分别为:
1、直接插入,也是就是说,我们先确定这个有序的数组是按升序还是降序,(当然得将数组下标加1)然后从头将这个数与数组里的数一一对比直到顺序确定之后,就可以插入,然后相应的数后移就可以了。
2、二分插入,基本思路是(按第1种方法操作前面的事),找到数组的中间位置,利用递归思想,再将相应一半的数组元素找到中间位置……直到确定此数位置,其后数字后移。
当然还有一些更复杂的方法,如果不是很满意,可以百度一下“数据结构排序”,就可以找到相应思想上的东西了。呵呵,不知道有没有帮到你。
- 2楼网友:北方的南先生
- 2021-12-31 09:53
下面是一个升序的整型数组,从键盘插入插入一个数,使原规律不变的编程:
#include
int main()
{
int m,i,j,t;
int a[11]={1,2,4,5,7,8,9,10,22,66};
scanf("%d",&m);
for(i=0;i<10;i++)
if(m=i;j--)
{ t=a[j+1];a[j+1]=a[j];a[j]=t;}
a[i]=m; }
for(i=0;i<11;i++)
printf("%d ",a[i]);
return 0;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯