题目:
编写一个函数,实现在一个升序数组中查找x应插入位置,将x插入数组中,并使其入仍升序
解析:
插入是数组基本操作,从第零位遍历数组与x比较,x小于或等于arr[i]时,从arr[i]开始移动数组元素向后移一位,arr[i] =x
逻辑:
for循环遍历if比较出位置i,for循环遍历 从尾部j开始,到i结束,将此段元素全部向后移动一位,最后arr[i]=x
参考代码:
// 编写一个函数,实现在一个升序数组中查找x应插入位置,将x插入数组中,并使其入仍升序
#include <stdio.h>
void insert(int *str, int x,int sz)
{
int i = 0;
int j = 0;
for (i = 0; i < sz-2; i++) // 使用指针得注意sz取值
{
if (x <= *(str+i)) // x插入数组首或中部
{
for (j = sz-1; j >= i; j--)
{
*(str + j) = *(str + j - 1);
}
*(str + i) = x;
break;
}
else if (x > *(str + sz - 2)) // x 插入数组尾部
{
*(str + sz-1) = x;
}
}
}
int main()
{
int arr[5] = { 1,2,4,6 };
int x = 0;
int sz = sizeof(arr)/sizeof(arr[0]);
printf("%d\n", sz);
insert(arr, x, sz);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ,", arr[i]);
}
return 0;
}
运行结果: