C语言:有n个已按从小到大的顺序排好的数组,现输入一个数要求按原来排序的规律将它插入数组中

C语言:有n个已按从小到大的顺序排好的数组,现输入一个数要求按原来排序的规律将它插入数组中

问题描述:

怎样解决“n个”的编写问题,“n个”应该怎样解决。

假设输入的数按从小到大排序

#define N 1000
int main(void){

	int a[N] = { 0 };
	int n,i,m,j;
	scanf_s("%d", &n);
	for (i = 0; i < n; i++)
		scanf_s("%d", &a[i]);
	scanf_s("%d", &m);
	for (i = 0; i < n;i++)
		if (a[i] >= m)
		{
			for (j = n - 1; j >= i; j--)
			{
				a[j+1] = a[j];
			}
			a[i] = m;
		}
	if (i == n)
		a[n] = m;
	return 0;
}

一种是动态分配空间,一种是先申请一个比较大的数组空间

数组插入的话只能从新申请一个大的内存,可以使用list和vector。或者如下:

#include <stdio.h>

int* Insert(int a[],int size,int value)
{
	int *p = new int[size +1];
	if (a[size-1] < value)
	{
		for(int i = 0; i < size; i++)
			p[i] = a[i];
		p[size] = value;
		return p;
	}

	int index = 0;
	bool b = true;
	for (int i = 0; i < size; i++)
	{
		if (a[i]< value)
		{
			p[index] = a[i];
			index++;
		}else
		{
			if (b)
			{
				p[index] = value;
				index++;
				p[index] = a[i];
				index++;
				b = false;
			}else
			{
				p[index] = a[i];
				index++;
			}
			
		}
	}
	return p;
}

int main()
{
	int a[] = {1,3,5,7,9,11,13};
	int *p = Insert(a,7,8);
	for (int i = 0; i < 8; i++)
	{
		printf("%d ",p[i]);
	}
	delete[] p;
	p = 0;
	getchar();
	return 0;
}

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632