C语言写一个函数find,实现从数组a[n]查找元素x,返回x在数组中的序号,如果找不到则返回-1,当a[n]递增有序时,有没有高效的算法?
时间: 2024-09-27 07:06:54 浏览: 71
C语言实现学生选课系统.doc
5星 · 资源好评率100%
在C语言中,你可以通过二分查找法(Binary Search)来高效地在递增有序数组`a[n]`中查找元素`x`。这种算法的时间复杂度是O(log n),相比于线性查找(时间复杂度为O(n)),效率更高。下面是简单的`find`函数实现:
```c
#include <stdio.h>
int find(int a[], int n, int x) {
int low = 0;
int high = n - 1;
while (low <= high) {
int mid = low + (high - low) / 2; // 避免整数溢出
if (a[mid] == x)
return mid; // 找到目标元素,返回索引
else if (a[mid] < x)
low = mid + 1; // 目标大于中间元素,缩小左边界
else
high = mid - 1; // 目标小于中间元素,缩小右边界
}
return -1; // 没有找到目标元素,返回-1
}
int main() {
int a[] = {1, 3, 5, 7, 9};
int n = sizeof(a) / sizeof(a[0]);
int x = 5;
int index = find(a, n, x);
if (index != -1)
printf("Element %d found at index %d\n", x, index);
else
printf("Element not found in the array.\n");
return 0;
}
```
在这个`find`函数中,我们首先初始化两个指针`low`和`high`分别指向数组的第一个和最后一个元素。然后在一个循环中不断比较中间元素和目标值,如果相等则返回该位置;如果不等于,则根据中间元素和目标值的关系调整搜索范围。如果整个范围内都没有找到目标,最后返回-1。
阅读全文