C语言实现二分查找
前言
二分查找比较简单,但还是花5分钟写一下,方便以后偷懒。
什么是二分查找
二分查找就是折半查找,相信大家都玩过猜数字的游戏,每次用二分法才就可以用最少的次数猜出数字。
假设有一个数组,A[10] = {11,12,13,14,15,16,17,18,19,20}。
定义三个指针:low,mid,high。以及我们要查找的目标数字goal。
初始时low指向第一个元素,high指向最后一个元素,每次mid=(low+high)/2,当目标值在mid的右边时low=mid+1,当目标值在mid的左边时high = mid -1。当low>high或A[mid]=goal时,结束查找。
代码实现
#include<stdio.h>
#define N 10
int Binary_search(int A[],int low,int high,int goal,int *index)
{
int mid;
while(low<=high)//当low>high时停止
{
mid = (low+high)/2;
if(A[mid]==goal)
{
*index = mid;
return *index;//如果已经找到,直接返回下标
}
if(A[mid]<goal)//目标值在右边,则指针向右移动
low = mid + 1;
else
high = mid - 1;
}
return 0;
}
int main()
{
int A[N] = {11,12,13,14,15,16,17,18,19,20};
int index;
if(Binary_search(A,0,N-1,20,&index))//分别传入数组,low指针,high指针,目标值goal,以及获取目标值下标
printf("已找到!下标为:%d\n",index);
else
printf("查找失败,该元素可能不存在!");
return 0;
}
经测试无误。