1.折半查找
从已给的数组中查找某元素,每次都从中间查找,前提是数组是递增或递减的,效率较高。
2.原理
和数学中的二分法类似,将需要查找的元素和数组的中间元素比较,进过这一次比较就能排除一般的元素,然后再循环这个过程
3.代码实现
#include <stdio.h>
//折半查找
int BinarySearch(int arr[],int size,int e)
{
int left=0;
int right=size-1;
while(left<=right)
{
int mid=(left+right)/2; //这一句必须放在循环里面,因为每次循环left或right的值会变
if(arr[mid]>e)
right=mid-1;
else if(arr[mid]<e)
left=mid+1;
else
return mid;
}
if(left>right)
return -1; //当返回值为-1时,就是没找到,其他均为找到
}
int main()
{
int arr[]={1,2,3,4,5,6,7,8,9};
int e=8; //要查找的元素
int size=sizeof(arr)/sizeof(arr[0]);
int ret=BinarySearch(arr,size,e);
if(ret!=-1)
printf("找到了!\n");
else
printf("没找到!\n");
return 0;
}
4.运行结果