我有一个已经排序的数字数组,所以不需要再进行排序,我需要在数组中插入一个给定值,命名为val
,并且要插入到一个有效的位置。
我的程序可以处理给定值小于最后一个元素的情况,但是当给定值大于最后一个元素时,程序就无法插入该值。
例如,对于数组{1, 2, 3, 4, 6}
和值5
,数组应该是{1, 2, 3, 4, 5, 6}
,但对于值7
,我的数组看起来像{1, 2, 7, 4, 6, 0}
。
#include <stdio.h>
void insert(int val, int *n, int v[])
{
int index;
index = n - 1;
if (n == 0)
{
v[0] = val; // check if array is empty
n = n + 1; // v[0] becomes the given value
} // increase size of array
if (val > v[index])
{
v[index+1] = val; // given value is bigger than the last value in array
n = n + 1; // increase size
}
else
{
while (index >= 0 && v[index] > val)
{
v[index+1] = v[index]; //shift items to the right
index--;
}
v[index + 1] = val; //after moving elements to the right
n = n + 1; // i set the value to the valid position
}
}
void display(int n, int v[])
{
int i;
for (i = 0;i < n; i++)
printf("%d ", v[i]);
}
int main(void)
{
int v[10] = { 12, 23, 34, 41, 69, 71, 81, 91, 100 };
int n;
n = 9; // size of array
insert(101,n,v); // 101 is given value to insert
display(n,v);
return 0;
}
n
参数是int*
而不是int
? - cayleeint *n ... int index = n - 1;
在一个开启了警告的编译器上会引发警告。节省时间,避免尴尬,开启警告。 - chux - Reinstate Monica