C++中二分查詢(遞迴,非遞迴)
阿新 • • 發佈:2019-01-23
二分查詢:二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好;其缺點是要求待查表為有序表,且插入刪除困難。
二分查詢要求:
1.必須採用順序儲存結構
2.必須按關鍵字大小有序排列。
這是我們二分查詢的步驟
假設表中元素是按升序排列,將表中間位置記錄mid與查詢關鍵字key比較,如果兩者相等,則查詢成功;否則利用中間位置mid將表分成前、後兩個子表,如果中間位置mid大於查詢關鍵字key,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。
下面我們看一下二分查詢的程式碼
非遞迴
int BinarySearch(int *arr, int n, int key, int left, int right)
{
left = 0;
right = n - 1;
while (left <= right)
{
int mid = (left + (right-left))>>2;
if (arr[mid] > key)
{
right = mid - 1;
}
else if (arr[mid] < key)
{
left = mid + 1;
}
else
{
return mid;
}
}
return -1;
}
遞迴
int BinarySearch(int *arr, int key, int left, int right)
{
if(right<left)
return - 1;
int mid = (left + (right-left))>>2;
if(arr[mid]>key)
{
return BinarySearch(arr, left, mid - 1, key);
}
else if(arr[mid]<key)
{
return BinarySearch(arr, mid + 1, right, key);
}
else
{
return mid;
}
return - 1;
}