#define _CRT_SECURE_NO_WARNINGS 1
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int binary_search(int arr[], int k, int sz)
{
int left = 0;
int right = sz - 1;
while (right >= left)
{
int mid = (left + right) / 2;
if (arr[mid] > k)
{
right = mid - 1;
}
else if (arr[mid] < k)
{
left = mid + 1;
}
else
return mid;
}
return -1;
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 7;
int ret = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
ret = binary_search(arr, k, sz);
printf("%d", ret);
return 0;
}
首先定义一个有序数组(二分查找只适用于有序的数集),定义局部变量k,作为被查找的数,定义数组的长度sz,(sizeof为判断数据类型长度的关键字),此时需定义二分查找的函数"binary_search"和其所需要的参数,while循环的判断条件为"right>=left",(“=”的情况为查找到中间只有一个数,此时循环已经给“left”或“right”赋值),定义mid为left和right的平均值作为数组的下标,(实现二分查找),使用if语句,当数组的中间值1大于k,则将中间值mid-1作为新的右范围,即“right=mid-1",反之则同理,当找到时return mid,不满足循环条件时,则返回值为-1(此时不能返回0,因为会和数组第一个数的下标混淆),然后主函数内定义变量ret,用于接收调用函数的值,然后输出ret的值即可。