就是让写仨函数:排序,二分,将元素插入有序数组
都很容易实现的三个函数
但报告里是:把前面排好序的数组再用作插入
这就出现一个问题
就是数组的定义问题
具体是
我初始化究竟初始化几个
如果初始化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。
因为我觉得老师应该不是想让我们这么写吧
我觉得是我数组那块基础不牢,才会出现这种怪怪的问题
感谢大家可以看到这