C语言实现无序的顺序查找(0的位置放哨兵);有序的折半查找;
时间: 2024-12-27 21:33:00 浏览: 31
**无序顺序查找(Unordered Linear Search with Sentinel)**:
在C语言中,无序顺序查找也叫线性查找,它的基本思想是从数组的第一个元素开始逐个比较,直到找到目标元素或遍历完整个数组。由于题目提到的是0作为哨兵,意味着数组的第一个元素实际上是索引为1的元素。以下是简单实现:
```c
int unordered_search(int arr[], int target, int n) {
int i;
for (i = 1; i <= n; i++) { // 跳过哨兵0
if (arr[i] == target) {
return i; // 找到目标,返回其位置
}
}
return -1; // 没找到,返回-1表示不存在
}
```
**有序折半查找(Binary Search)**:
对于有序数组,折半查找(也称为二分查找)效率更高。它是通过不断将查找区间缩小一半的方式进行的。以下是C语言实现:
```c
int ordered_binary_search(int arr[], int target, int low, int high) {
while (low <= high) {
int mid = (low + high) / 2;
if (arr[mid] == target) {
return mid; // 找到目标,返回其位置
} else if (arr[mid] < target) {
low = mid + 1; // 目标在右半部分,调整下限
} else {
high = mid - 1; // 目标在左半部分,调整上限
}
}
return -1; // 没找到,返回-1表示不存在
}
```
在这段代码里,`low` 和 `high` 分别表示当前查找区间的下界和上界。
阅读全文