用C语言建立一张有序表,采用折半查找算法查找输入的关键字,并返回其所在的位置
时间: 2025-01-05 10:40:54 浏览: 7
在C语言中,我们可以使用数组和二分查找算法来创建一个有序表并查找关键字。下面是一个简单的步骤:
1. **创建有序表**:
首先,我们需要定义一个动态数组,存储数据和它们的索引。例如,假设我们有一个整数数组`int items[]`和一个同样长度的`int indices[]`。
```c
int size = 10; // 初始化数组大小
int* items = malloc(size * sizeof(int)); // 动态分配内存
int* indices = malloc(size * sizeof(int));
```
2. **插入元素**:
然后对数组进行排序(这里假设已排序),并用一个辅助函数`insert_sorted()`插入元素及其对应的索引。
```c
void insert_sorted(int key) {
int index = 0;
while (index < size && items[index] < key) {
index++;
}
items[index] = key; // 插入关键字
indices[index] = size; // 设置初始索引为数组大小,后续查找会更新
size++; // 扩展数组
}
```
3. **折半查找**:
实现折半查找的`binary_search()`函数,接受关键字`key`作为参数,通过比较中间元素并调整搜索范围直到找到位置或范围缩小到空。
```c
int binary_search(int key) {
int left = 0, right = size - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (items[mid] == key) {
return indices[mid]; // 返回关键字的索引
} else if (items[mid] < key) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1; // 如果未找到,返回-1表示不存在
}
```
4. **测试与销毁**:
使用上述函数插入一些数据,然后尝试查找特定的值,记得最后释放动态分配的内存。
```c
// 示例:
insert_sorted(5); // 插入元素5
...
int position = binary_search(5); // 查找关键字5的位置
if (position != -1) {
printf("元素5的位置是:%d\n", position);
} else {
printf("5不在数组中\n");
}
free(items); // 释放数组内存
free(indices);
```
阅读全文