折半查找是一种较为高效的查询方法,其使用条件是要查找的数据是需要排好序的,有了这个前提条件,折半查找的时间复杂度最差也是在O(logn),是非常高效的一种查询方式,其思路是从数组中间值arr[mid]和所查询的值key进行比较,
如果arr[mid] == key,那么就是找到了;
如果arr[mid] > key,就是在数组的左半边查找;
如果arr[mid] < key,就是在数组的右半边查找
循环往复,这样一次省略一半的数据,在数据量特别多时,效率非常的快。
参考代码如下:
/*
折半查找
*/
int FindHalfNumber(int *arr, int len, int key)
{
if (arr == NULL || len < 0)
{
return -1;
}
int left = 0;
int right = len - 1;
int mid;
while (left <= right)
{
mid = (left + right) / 2;
if (arr[mid] == key)
{
return mid;
}
if (arr[mid] > key)
{
right = mid - 1;
}
if (arr[mid] < key)
{
left = mid + 1;
}
}
if (left &#