大一生在写C++一个实验报告时遇到的有意思的事

文章讨论了在处理已排序数组时遇到的问题,即如何正确插入元素而不改变排序顺序。作者提到初始化数组时,额外的一个空位被编译器初始化为0,导致排序后0出现在首位并可能导致数据丢失。为解决此问题,作者考虑使用动态数组并在插入前扩容,但寻求无需动态数组的解决方案。
摘要由CSDN通过智能技术生成

 就是让写仨函数:排序,二分,将元素插入有序数组

都很容易实现的三个函数

但报告里是:把前面排好序的数组再用作插入

这就出现一个问题

就是数组的定义问题

具体是

我初始化究竟初始化几个

如果初始化10个的话,那么后面插入就会越界

所以肯定初始化11个元素

那么我给数组初始化10个值

int arr[11]={1,13,5,7,19,15,3,11,17,9};

到现在看起来没啥问题

但在我们初始化10个值后,还空一个位置,这个位置编译器会给它初始化成0

实际上是

int arr[11]={1,13,5,7,19,15,3,11,17,9,0};

问题出现了

就是在我进行排序后,这个0他就会占到第一位,变成

int arr[11]={0,1,3,5,7,9,11,13,15,17,19};

后来我有序插入一个数字后(比如插入2),那么就会把19给挤出去

变成下面这个

int arr[11]={0,1,2,3,5,7,9,11,13,15,17};

这样就多了个原来数组没有的0而少了数组本应该有的19

我想了很久不知道怎么解决,最后只能去定义一个动态数组

然后在插入数据之前对原数组进行扩容

这是我实现的插入函数

void Insert(int arr[], int length,int x)
{
		int index=0;
		for (int i = 0; i < length-1; i++)
		{
			if (x > arr[i] && x < arr[i + 1])
			{
				index = i + 1;
				break;
			}
		}
		for (int i = 9; i >= index; i--)
		{
			arr[i + 1] = arr[i];
			
		}
	arr[index] = x;

}

我想知道怎么不用动态数组,可以解决这个多出的0和我丢掉的19。

因为我觉得老师应该不是想让我们这么写吧

我觉得是我数组那块基础不牢,才会出现这种怪怪的问题

感谢大家可以看到这

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值