关于在有序数组中插入数字,并进行重新排序的问题

对于往数组中插入数字,我们可能最先想到的是直接往数组中存入数字,但是这个方法有点过于的简单粗暴,而且会很麻烦,最直接的麻烦处是关于对数字输入的地方,可能会输入数组[i+1]处,但是我们并不知道i等于多少,至少不能一个个的数。

那么我们可以去定义一个变量,将输入的数字存入这个变量中

int num;
scanf_s("%d", &num);

 在将数组中的数字与这个num进行判定,并要从数组最末端进行判定,如果最末端的数字大于num则,将最末端的数字所处的位置向后移1位,以此类推。当数组中的某一个数字不大于num,那么num所处的位置就是这个数字的后一位,并对该变量进行插入,如下

a[i + 1] = num;//让a[i+1]赋值为num

那么整个程序便是以下所示

int main()
{
	int i,n=15, num;//定义一个变量num,将输入的数字存入,定义变量n也方便当后面数字的输入数组对总数增加1,同时方便输出
	int a[20] = { 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29 };
	printf("请输入1—29之间的偶数:\n");
	scanf_s("%d", &num);
	for (i = n-1; i >=0; i--) {//从后面进行判断可以将大于num的数组进行向后移位
		if (a[i] > num) {
			a[i + 1] = a[i];//若a[i]大于num则向后进行移位,以便为num的插入空出一个位置
		}
		else break;//若a[i]未大于num那么num可能位于该a[i]的后一位,便可以跳出循环;
	}
	a[i + 1] = num;//让a[i+1]赋值为num
	n = n + 1;//总数加一
	for (i = 0; i < n; i++) {
		printf("%4d", a[i]);//输出
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值