用C语言写一个完整详细的二分查找算法
时间: 2023-12-29 17:55:24 浏览: 27
好的,下面是用C语言实现的完整详细的二分查找算法:
```c
#include <stdio.h>
int binary_search(int arr[], int n, int key);
int main()
{
int arr[] = {1, 3, 5, 7, 9, 11, 13, 15, 17};
int n = sizeof(arr) / sizeof(arr[0]);
int key = 11;
int index = binary_search(arr, n, key);
if (index == -1) {
printf("未找到%d\n", key);
} else {
printf("%d的下标是%d\n", key, index);
}
return 0;
}
int binary_search(int arr[], int n, int key)
{
int left = 0, right = n - 1;
while (left <= right) {
int middle = (left + right) / 2;
if (key == arr[middle]) {
return middle;
} else if (key > arr[middle]) {
left = middle + 1;
} else {
right = middle - 1;
}
}
return -1;
}
```
该程序先定义了一个二分查找的函数 `binary_search()`,接收三个参数:`arr` 为要查找的数组,`n` 为数组的长度,`key` 为要查找的值。
在主函数中,定义了一个长度为9的有序数组 `arr`,要查找的值为 11。
然后调用二分查找函数,判断返回值,如果返回 -1 说明未找到,否则返回查找到的元素所在的下标。
在二分查找函数中,首先定义了左右两个指针变量 `left` 和 `right`,分别指向数组的起始位置和结束位置。
然后进入一个循环,当左指针小于等于右指针时,就进行查找。
计算出中间位置 `middle`,如果查找的值等于中间元素,直接返回当前下标。
否则,如果查找的值大于中间元素,说明要在右边部分查找,就将左指针移动到中间位置的右边一位;如果查找的值小于中间元素,说明要在左边部分查找,将右指针移动到中间位置的左边一位。
如果while循环执行完毕也没有找到要查找的元素,就返回 -1。
以上就是用C语言实现的完整详细的二分查找算法了。