二分查找又稱折半查找,優點是比較次數少,查找速度快,平均性能好;其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查找方法適用於不經常變動而查找頻繁的有序列表。
二分查找法是已經排好順序的集合,要從集合的中間開始查找,如果這個項小於我們要查找的數,則這個項前邊的所有數都小於我們要查找的對象
就無需再浪費時間去查在前邊的數查找;如果搜尋的數天於我們要查找的對象那么這個數的后邊的數都大於我們要查找的對象,則后邊的數我們也不用再去查找了。
下邊我會用c#和c++兩種語言給出代碼
c#二分查找代碼
static void Main(string[] args)
{
int[] _array={ 1,3,5,6,10,14,16,20,21,23,28};
int _findValue = BinSearch(_array, 0, _array.Length, 3);
if (_findValue == -1)
{
Console.WriteLine("not find");
}
else
{
Console.WriteLine("find the value at " + _findValue);
}
Console.ReadLine();
}
static int BinSearch(int[] _array, int start, int end, int key)
{
int left, right;
int mid;
left = start;
right = end;
while (left <= right)
{
mid = (left + right) / 2;
if (key < _array[mid])
{
right = mid - 1;
}
else if (key > _array[mid])
{
left = mid + 1;
}
else
return mid;
}
return -1;
}
c++二分查找代碼
int BinSearch(const int* Array,int start,int end,int key)
{
int left,right;
int mid;
left=start;
right=end;
while(left<=right)
{
mid = (left + right)/2;
if(key < Array[mid])
{
right = mid - 1;
}
else if(key > Array[mid])
{
left = mid + 1;
}
else
return mid;
}
return -1;
}
int main(int argc,char* argv[])
{
int _array[11] ={ 1,3,5,6,10,14,16,20,21,23,28};
int _findInt =BinSearch( _array,0,(sizeof _array)/(sizeof _array[0]),3);
if(_findInt == -1)
{
cout<<"not find"<<endl;
}
else
{
cout<<"find the Value at "<<_findInt<<endl;
}
return 0;
}
