每进行一次循环,就将所要查找的元素减少一半,在剩下的一半中循环往复,最终找到所要查找的元素。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//二分查找
int Find(int arr[], int sz, int k)
{
int left = 0;
int right = sz - 1;
while (left <= right)
{
int mid = left + (right-left) / 2;//右边-左边是负数
if (k > arr[mid])//那么寻找的值就在右边
left = mid + 1;//右边就要换值了
else if (k < arr[mid])//那么寻找的值就在左边
right = mid - 1;//左边就要换值了
else
return mid;//返回下标
}
if (left > right)
return -1;//找不到
}
int main()
{
int arr[] = { 1,2,3,4,5,67,7};//这里不要指定数组大小,下一步计算长度的时候会出问题
int sz = sizeof(arr) / sizeof(arr[0]);
int k = 0;
printf("请输入要查找的数字:\n");
scanf("%d",&k);
int m=Find(arr, sz, k);
if (m == -1) printf("找不到");
else printf("找到了,下标是: %d\n", m);
return 0;
}