/*
对折法
参数:
DWORD IN_pArray[], 待查找数组
DWORD IN_ArrayNum, 数组大小
DWORD Value 待匹配数据
返回:
0xffffffff 查找识别
0-IN_ArrayNum-1 匹配成功,返回位置
*/
DWORD BinarySearch(DWORD IN_pArray[],DWORD IN_ArrayNum,DWORD Value )
{
//首先判断是否在数组中
if( (Value<IN_pArray[0]) || (Value>IN_pArray[IN_ArrayNum-1]) ) return 0xffffffff;
//数组头指针
DWORD *pArray=IN_pArray;
//元素个数
DWORD Num=IN_ArrayNum;
DWORD Temp;
//对折循环
//元素个数为1时,无需对折
while( Num>1 )
{
//数量直接右移
Temp=Num>>1;
//是否在数组右半部
if( pArray[Temp]<Value )
{
pArray+=Temp+1;
Num-=Temp+1;
}
//是否在数组左半部
else if( pArray[Temp]>Value )
{
Num=Temp;
}
//匹配成功
else
{
//返回位置
return pArray+Temp-IN_pArray;
}
}
//对折循环--End
//当元素个数为1是判断是否匹配,返回位置
if( pArray[0]==Value ) return pArray-IN_pArray;
return 0xffffffff;
}
二分查找源代码
最新推荐文章于 2023-12-04 13:44:37 发布