#include <stdio.h>
int find(int *a, int n, int target) {
int low = 0;
int high = n - 1;
while (low <= high) {
int mid = low + (high - low) / 2;//每次循环都需要重新初始化mid值
if (a[mid] == target) {
return mid;
} else if (a[mid] < target) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return low; // 根据手算,若查找失败,左边high,右边low,中间夹着被查找值
}
void insert(int *a, int *n, int index, int value) {//传入时用指针,虽然a没有整体动,不用&a,但是a内部更改了,所以*a,或者a[]也可以
for (int i = *n; i > index; i--) {
a[i] = a[i - 1];
}
a[index] = value;
(*n)++;//必须用指针
}
int main() {
int a[100] = {1, 3, 5, 7, 9}; // 有序数组
int n = 5; // 数组长度
int target;
printf("请输入要查找的元素: ");
scanf("%d", &target);
int k = find(a, n, target);
if (k < n && a[k] == target) {
printf("元素 %d 在数组中的索引为 %d\n", target, k);
} else {
printf("元素 %d 不存在于数组中,将其插入到数组中\n", target);
insert(a, &n, k, target);//数组只是末尾加减值,没有动a,所以不用&a,但是n就一个值,整体动了,就得&n
printf("插入后的数组为: ");
for (int i = 0; i < n; i++) {
printf("%d ", a[i]);
}
printf("\n");
}
return 0;
}
折半查找元素位置,若查不到插入并返回数组
最新推荐文章于 2024-07-15 22:10:26 发布