///
<summary>
///
折半查找的Match参数原型
///
</summary>
///
<param name="Index">
BiSearch生成的索引
</param>
///
<returns>
0:索引处的数据匹配成功;1:要寻找的数据在索引与上界之间;-1:要寻找的数据在索引与下限之间
</returns>
public
delegate
int
BiSearchMatch(
int
Index);
///
<summary>
///
折半查找:此函数将根据上下界按折半查找规则生成可能的索引,并使用生成的索引逐个调用Match委托,直到匹配成功或没有其它可能的索引。
///
</summary>
///
<param name="LBound">
下界
</param>
///
<param name="UBound">
上界
</param>
///
<param name="Match">
匹配委托
</param>
///
<returns>
若返回值在(LBound,UBound)区间内,则查找成功且返回值即为要寻找的索引;若返回值小于下限,则表示未找到要寻找的索引。
</returns>
public
static
int
BiSearch(
int
LBound,
int
UBound, BiSearchMatch Match)
{
int
Mid,Result,TempLBound
=
LBound;
if
(LBound
>
UBound
||
Match
==
null
)
return
LBound
-
1
;
while
(LBound
<=
UBound)
{
Mid
=
LBound
+
((UBound
-
LBound)
>>
1
);
Result
=
Match(Mid);
if
(Result
==
0
)
return
Mid;
else
if
(Result
>
0
)
LBound
=
Mid
+
1
;
else
UBound
=
Mid
-
1
;
}
return
TempLBound
-
1
;
}