[C语言]向有序数组插入:已有一个按升序排序的数组,含n个元素。输入整数x,将x插入数组中,使数组元素仍按升序排列。请使用数组实现。

输入

输入包含三行:
第一行是数组元素个数n(1 < n < 20)。
第二行是数组n个元素,相邻两项之间用一个空格隔开。
第三行是待插入的元素x。

输出

输出插入后数组的所有元素,相邻两项之间用一个空格隔开。

输入示例

5
1 3 5 7 9
2

输出示例

1 2 3 5 7 9

数据范围

输入输出均为int范围的整数

#include <stdio.h>
#include <stdlib.h>
int main() {
	int n,i,j,x;
	scanf("%d",&n);
	int a[n];
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
	}                                 //基础部分,即输入数组和定义变量
	scanf("%d",&x); //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
	if(x>=a[n-1]){           //下面是排序部分(其实也不是排序,因为题中给的就是排好的)
		for(j=0;j<n;j++){         //此部分主要是想办法找到插入数据与已排好顺序的数组中的关系
			printf("%d ",a[j]);  // 
		}                   //←←←←←←←←←←若x比最后一位数都小大,则直接先打印数组,再打印x
		printf("%d",x);         
	}
	else if(x<=a[0]){         //←←←←←若x比第一位数都小,则直接先打印x,再打印数组
		printf("%d ",x);
		for(j=0;j<n;j++){
			printf("%d ",a[j]);
		}
	}
	else{
    	for(j=0;j<n;j++){          //第三种情况就是在这些值中间
		    if(x>a[j]&&x<a[j+1]){    //也有可能相等的情况出现,所以既要比前一位大,又要比后
			    printf("%d ",a[j]);  //一位小,才满足条件,然后先打印前一位(否则会丢失)再打
			    printf("%d ",x);     //印比前一位a[j]大的x
			    }
		    else{
			    printf("%d ",a[j]);  //若不满足条件,则继续打印该有序数组
		}
	}
	}
	return 0;
}

此题其实不需要排序,因为题中给出的已经为有序数组,正如题目所说 “插入”,而并不是再排一遍,所以直接找出插入值与数组个元素关系即可

无非三种情况:1.插在开头 2.插在结尾 3.插在中间

然后根据此3种情况设置判断条件来控制输出即可(先打印插入值or先打印数组值)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值