利用折半查找实现确定记录所在块的分块查找,C语言编程
时间: 2024-03-25 21:37:39 浏览: 51
以下是用折半查找实现确定记录所在块的分块查找的 C 语言代码:
```c
#include <stdio.h>
#define BLOCK_SIZE 5
int block_search(int arr[], int n, int key)
{
int i, j, k;
for (i = 0; i < n; i += BLOCK_SIZE) {
if (key >= arr[i] && key <= arr[i + BLOCK_SIZE - 1]) {
for (j = 0, k = i; j < BLOCK_SIZE; j++, k++) {
if (arr[k] == key) {
return k;
}
}
return -1; // key not found in block
}
}
return -1; // key not found in array
}
int main()
{
int arr[] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30};
int n = sizeof(arr) / sizeof(arr[0]);
int key = 14;
int index = block_search(arr, n, key);
if (index != -1) {
printf("Key found at index %d\n", index);
} else {
printf("Key not found\n");
}
return 0;
}
```
此代码中,我们使用了一个固定的块大小 `BLOCK_SIZE`,并通过一个 `for` 循环依次遍历每个块。如果关键字 `key` 在第 `i` 个块中,则在该块内进行折半查找,找到 `key` 的位置并返回。如果 `key` 不在当前块内,则继续遍历下一个块。如果 `key` 不在整个数组中,则返回 `-1`。
阅读全文