赞
踩
题目:
编写一个函数,实现在一个升序数组中查找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;
- }
运行结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。