#include<iostream>
/*
*有序数组的二分法查询
*list:有序的数组,len:数组的长度,key:查询的关键值
*@return
* -1:表示查询失败,其他数字:表示查询成功
*/
int binarySearch(int* list,int len ,int key)
{
int low = 0,high =len-1; //数组的两个“游标”
int mid = (low+high)/2 ; //找寻中点位置
while(low <= high) //查找退出的条件
{
if(list[mid] < key) //如果中点位置的值小于关键值
{
low = mid +1 ; //调整low的位置
mid = (low+high)/2; //调整中点的位置
}
else if(list[mid] > key) //如果中点位置的值大于key
{
high = mid-1 ; //调整high的位置
mid = (low+high)/2 ;//调整中点的位置
}
else //查询成功
{
return mid ;
}
}
return -1 ; //查询失败
}
int main()
{
int a[] = {0,1,2,3,4,5,6,7,8,9} ; //有序的数组
int pos = binarySearch(a,sizeof(a)/sizeof(int),5) ;//二分法查询元素
if(pos = -1 ) //查询返回值判断为失败
std::cout<<"not in the array"<<std::endl;
else //成功查询
std::cout<<a[pos]<<" " <<std::endl ;
return 0 ;
}
算法复习之二分查找
最新推荐文章于 2021-09-02 16:34:09 发布