随机产生1000个整数构成的递增序列,使用折半查找算法查找指定的整数,并统计比较次数。提示:可用 a[i] = a[i-1] + rand() % 10 + 1产生递增序列。使用c语言,并且说明算法思想
时间: 2024-03-16 17:43:31 浏览: 55
折半查找算法,也称为二分查找算法,是一种基于有序数组的查找算法。其基本思想是:首先将待查找的数据和数组的中间位置进行比较,如果相等,则查找成功;如果待查找的数据比中间位置的数据小,则在数组的左半部分继续查找;如果待查找的数据比中间位置的数据大,则在数组的右半部分继续查找。通过不断缩小查找范围,最终找到待查找的数据或确定其不存在。
下面是使用C语言实现折半查找算法的代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int binary_search(int a[], int n, int x) {
int left = 0, right = n - 1, mid, cnt = 0;
while (left <= right) {
mid = (left + right) / 2;
cnt++;
if (a[mid] == x) {
printf("查找成功,比较次数为%d\n", cnt);
return mid;
} else if (a[mid] > x) {
right = mid - 1;
} else {
left = mid + 1;
}
}
printf("查找失败,比较次数为%d\n", cnt);
return -1;
}
int main() {
int a[1000], i, x;
srand(time(NULL));
for (i = 0; i < 1000; i++) {
if (i == 0) {
a[i] = rand() % 10 + 1;
} else {
a[i] = a[i-1] + rand() % 10 + 1;
}
}
printf("请输入要查找的整数:");
scanf("%d", &x);
binary_search(a, 1000, x);
return 0;
}
```
代码中,首先使用 srand(time(NULL)) 函数初始化随机数生成器,然后使用 a[i] = a[i-1] + rand() % 10 + 1 生成递增序列。在 main 函数中,输入要查找的整数 x,然后调用 binary_search 函数进行查找。函数返回查找到的位置,如果查找失败则返回 -1,并输出比较次数。
在本代码实现中,折半查找算法的时间复杂度为 O(log n),其中 n 为数组的长度。因为每次查找时都将查找范围缩小了一半,所以最多需要查找 log n 次即可找到数据或判定不存在。
阅读全文