折半查找算法也叫二分查找算法
算法思想:
假定有一组数据(有序),用关键字去和它中间的数字进行比较,若关键字大于中间数则在中间数的右边(后边)进行查找;
若关键字小于中间数,则在中间数的左边(前边)进行查找。
注意:运用二分查找算法的数组必须自身有序
#include<stdio.h>
int BinSearch(int *arr, int len, int key)
{
int low = 0;
int high = len - 1;
int mid;
while (low <= high)
{
mid = (low + high) / 2;
if (key == arr[mid])
{
return mid;
}
else if (key < arr[mid])
{
high = mid - 1;
}
else
{
low = mid + 1;
}
}
return mid;
}
int main()
{
int arr[] = { 1, 3, 5, 6, 8, 9, 13, 20 };
printf("%d\n", BinSearch(arr,sizeof(arr)/sizeof(arr[0]),8));
return 0;
}
代码运行结果: