二分查找
查找:在一个非降序排列的数组Array中,查找一个元素key,如果找到返回这个元素对应的下标,否则返回-1。
二分查找的思想是,先将key与序列的中位数比较Array[mid],如果相等则查找成功,如果key小则可知待查找值只可能在该中位数的左侧,因此在该中位数之前继续查找并同样采用取中位数的方式;反之相反的操作,不断循环。
实现方法:循环或递归(增加了空间复杂度),代码如下。
#include <stdio.h>
#include <stdlib.h>
//二分查找
int BinarySearch(int arr[], int low, int high, int key)
{
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 -1;
}
int main()
{
int arr[] = {1,1,2,5,6,7,8,9,15,25};
int nIndex = BinarySearch(arr, 0, sizeof(arr)/sizeof(arr[0]), 10);
printf("%d\n", nIndex);
return 0;
}