二分查找
- 时间复杂度O(log2n)
#include<stdio.h>
#include <cassert>
int BinSearch(int *arr, int len, int key)//折半查找,二分查找,有序
{ //O(log2n),log以2为底n的对数
assert(arr != NULL);
if (NULL == arr)
{
return -1;
}
//定义三个下标位置
int low = 0;
int high = len - 1;
int mid;
while (low <= high)//左右下标持续缩小
{
mid = (high - low) / 2 + low;//考虑数组越界问题
//mid = (high + low) / 2;
if (arr[mid] == key)
{
return mid;
}
else if (arr[mid] < key)//中值小于key
{
low = mid + 1;//重新定义low位于中值的右边,从右半边查找
}
else //中值小于key
{
high = mid - 1;//重新定义high位于中值的左边,从左半边查找
}
}
return -1;
}
int main()
{
int arr[] = { 1,3,4,5,8,20,23,36,50 };
printf("%d\n",BinSearch(arr, sizeof(arr) / sizeof(arr[0]), 36));
return 0;
}