输入一个元素数为n的升序数组,在插入整数x,y,后该数组仍有序。

下面的代码要是在数组末位插入就出现负数,不对了,要怎么改啊?
#include<iostream>
using namespace std;
int main()
{
int n,i,j;
int a[20];
int x,y;
cin>>n;
for(i=0;i<n;i++)
{cin>>a[i];}
cin>>x>>y;
for(i=0;i<n;i++)
{
if(a[i]>x)
{
for(j=n;j>i;j--)
{a[j]=a[j-1];}
a[i]=x;
break;
}
}
for(i=0;i<n;i++)
{
if(a[i]>y)
{
for(j=n+1;j>i;j--)
{a[j]=a[j-1];}
a[i]=y;
break;
}
}
for(i=0;i<n+2;i++)
{cout<<a[i]<<" ";}
cout<<endl;
return 0;
}

插入x的循环后加入了插入失败的情况,也就是把x放到新数组(长度n+1)末尾;然后尝试把y插入这个新数组中,循环次数比上一个多了一次(i<n+1),如果y比新数组所有元素都大,把y放到新新数组(长度n+2)。

实现代码:

#include <iostream>

using namespace std;

int main()

{



int n, i, j;

int a[20];

int x, y;

cin >> n;

for (i = 0; i < n; i++)

{

cin >> a[i];

}

cin >> x >> y;

for (i = 0; i < n; i++)//尝试将x插入长度为n的原数组中

{

if (a[i] > x)

{

for (j = n; j > i; j--)

{

a[j] = a[j - 1];

}

a[i] = x;

break;

}


}

if (i == n) //如果x不能插入数组,则将其放到末尾a[n]处

{

a[i] = x;

}

for (i = 0; i < n + 1; i++)//尝试将y插入有x的、长度为n+1的数组中

{

if (a[i] > y)

{

for (j = n + 1; j > i; j--)

{

a[j] = a[j - 1];

}

a[i] = y;

break;

}


}

if (i == n+1) //如果y不能插入数组,则将其放到末尾a[n+1]处

{

a[i] = y;

}

for (i = 0; i < n + 2; i++)

{

cout << a[i] << " ";

}

cout << endl;


return 0;

}

温馨提示:内容为网友见解,仅供参考
无其他回答

输入一个元素数为n的升序数组,在插入整数x,y,后该数组仍有序。
插入x的循环后加入了插入失败的情况,也就是把x放到新数组(长度n+1)末尾;然后尝试把y插入这个新数组中,循环次数比上一个多了一次(i<n+1),如果y比新数组所有元素都大,把y放到新新数组(长度n+2)。实现代码:include <iostream> using namespace std;int main(){ int n, i, j;int a[20...

在一个长度为n的有序表中插入一个新元素x,要求插入后仍保持线性表的有...
先用一个变量,保存要插入的值,从数组的最后一个元素开始,假设数组原先是升序的。把所有大于x的元素都后移一位,最后把x插入到最后后移元素的原来位置,并把数组的有效元素个数加一,这样就完成了插入的操作。

在一个升序数组中插入一个数,使数组仍然保持升序排列。求代码
include <stdio.h> void sort(int num[],int n,int k){ for(int j=0;j<n;j++){ if(num[j]>k){ int a=num[j];num[j]=k;k=a;} } num[n]=k;for(int i=0;i<=n;i++)printf("%5d",num[i]);} int main(){ int t[100],c,d;while(~scanf("%d %d",&c,&d))...

...的整型数组中插入一个数,使得插入后的数组元素仍然有序
#define N 5void main(){ int a[N+1],x,i,k; \/\/ 等待输入数组 for(i=0;i<N;i++) scanf("%d",&a[i]);\/\/等待输入插入数值 scanf("%d",&x); \/\/找到数值要插入的坐标位置 (从0开始,下标递增查找,满足数组的值<插入的数值,继续查找,找到第一个比插入数值大的数) for(i=0;a[i]<x&&...

c语言将用户输入的整数插入到按升序排好序的整数数组中,插入后仍然保持...
10]= {0,1,2,3,4,5,6,7,8,9};int resultarr[11];int i,index=0,num=0;printf("请输入要插入的整数:\\n");scanf("%d",&num);for(i=0; i<10; i++) {if(sortarr[i]>=num){index=i;break;}}for(i=0; i<11; i++) {if(i<index) {resultarr[i]=sortarr[i];...

已知一个已升序排列的数组,从键盘输入一个数,将它插入到数组中的合适...
8. i=9;9. a[i] > x 10. a[i+1] = x 对于8,开始要找到数组的末尾,才能从后往前找。对于9,我们要找到输入的x比数组中的数大的位置,因此如果当前数组元素大于x,就要往前找。对于10,根据注释填入程序即可。结果如下:

什么是插入排序?
插入排序基本思想:输入一个元素,插入到一个已经排好序的数列中的适当位置,使数列依然有序。例如:输入一个数,插入一个各元素已经按照升序排列的数组中,插入后使数组中元素仍然是按照升序排列的。思想:把欲插入的数与数组中各数逐个比较, 当找到第一个比插入数大的元素i时,该元素之前即为插入...

C++有一个已经从小到大排好序的整数数组,现输入一个整数x,要求按原来...
找到 插入 的 位置,也就是 数组下标 再 将后面的 挪一格 插入

输入一个数 n再输入 n 个整数存入数组 a 中,用选择法将 a 中的元素按...
1、首先,我们声明一个一维数组。2、然后我们输入【Array.Sort(a);】。3、在接下来我们编写一段遍历代码。4、最后我们输入屏幕等待语句。5、然后我们便可以点击启动调试按钮。6、这时便可以成功输出排序后数组元素。

已有一个排好序的序列,输入一个数插入到该序列中,使其仍然保持有序.
假设原序列名为a,要插入的数为b.如果数字是从小到大排列的.for(int i=n,;i>=0;i--)\/\/n为数组a的元素个数 { if(a[i]>=b){ a[i+1]=a[i];a[i]=b;} else continue;}

相似回答