二分查找,也稱折半查找
目的:提高查找速度(當查找性能成為問題時,考慮使用二分查找)
使用前提:(較為嚴格)
已經排好序(升序或降序)的數組
算法思想
每次跟中間元素mid比較,如小于mid,則在前半部分;若大于mid,則在后半部分,若等于mid,則查找完成。
示例代碼
//增序排列的二分查找
int bin_find(const int arr[], int len, int val)
{
int low = 0;
int hight = len - 1;
while (low<=hight)
{
int mid = (hight + low) / 2; //中間位置
if (arr[mid] == val)
{
return mid;//找到了
}
else if(arr[mid]>val)
{
hight = mid - 1;//比中間項小,則在左側
}
else
{
low = mid + 1;//比中間項大,則在右側
}
}
return -1;
}
int main()
{
int data[8] = { 54,0xa1,0x7f,12,10,9,98,119 };
int bin_num = bin_find(data, 8, 12);
return 0;
}
- 與遍歷查找比較
查找速度優于遍歷查找,
最多查找log2(N)次
最少查找1次
??