using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
namespace
二分查找
{
class
Program
{
static
void
Main(
string
[] args)
{
int
[] arry =
new
int
[] { 1,2,3,5,6,7,8,9};
//查找有序数列的 某一个数的下标
//二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;
//其缺点是要求待查表为有序表,且插入删除困难。
//因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
int
a = HalfFind(arry,0,arry.Length-1,7);
Console
.WriteLine(a);
}
//递归写法
static
int
BinSearch(
int
[] Array,
int
low,
int
high,
int
key)
{
while
(low <= high)
{
int
mid = (low + high) / 2;
if
(key == Array[mid])
return
mid;
else
if
(key < Array[mid])
//移动low和high
{
return
BinSearch(Array, low, mid - 1, key);
}
else
{
return
BinSearch(Array, mid + 1, high, key);
}
}
return
-1;
}
static
int
HalfFind(
int
[]arry ,
int
start,
int
end,
int
key) {
int
mid = 0;
//等于号 必须有 只有一个元素时 =
while
(start<=end)
{
mid = (start + end) / 2;
if
(key < arry[mid])
{
end = mid - 1;
}
else
if
(key>arry[mid])
{
start = mid + 1;
}
else
{
return
mid;
}
}
return
-1;
}
}
}