二分查找 叫折半查找,它對要查找的序列有兩個要求,一是該序列必須是有序的,二是該序列必須是順序存儲的。
二分法查找算法的原理如下:
1、 如果待查對象為空返回-1,表示查找不到目標元素
2、 如果待查序列不為空,則將中間元素與要查找的目標元素進行匹配看是否相等,如果相等表示 查找成功,返回該中間元素的索引
如果不相等再比較這兩個元素的大小
3、 如果該中間元素大於目標元素,則將當前序列的前半部分作為新的待查序列
4、 如果該中間元素小於目標元素,則將當前序列的後半部分作為新的待查序列
5、 在新的待查序列上重新開始第1步的工作
一、使用C語言實現折半查找算法
#include <stdio.h>
/**
* @brief binarySearch
* @param a:待查找序列
* @param n:數組元素個數
* @param target:待查找目標元素
* @return:失敗返回-1,成功返回數組索引
*/
int binarySearch(int a[] ,int n ,int target){
int mid , low = 0 , high = n - 1;
while(low <= high){
mid = ( low + high )/2;
if(a[mid] == target){
return mid;
}else if(a[mid] > target){
high = mid - 1;
}else{
low = mid + 1;
}
}
return -1;
}
int main(void)
{
int a[] = {1,3,6,12,21,29,31,46,57,88,99};
int index = binarySearch(a ,11 ,88);
printf("index = %d",index );
return 0;
二、使用Python語言實現折半查找算法
由於很多小夥伴都在學Python,為了練習算法的思想及其Python的語法規則,請大家仔細使用Python練習二分法查找算法的這個題目。相關Python實現如下:
# @brief binarySearch
#@param a:待查找序列
#@param n:數組元素個數
#@param target:待查找目標元素
# @return:失敗返回-1,成功返回數組索引
def binarySearch(a , n , target):
mid = 0
low = 0
high = n - 1
while low <= high :
mid = (low + high) /2
# 將浮點型轉換為整型
mid = int(mid)
if a[mid] == target:
return mid
elif a[mid] > target:
high = mid - 1
else:
low = mid + 1
return -1
a = [1,3,6,12,21,29,31,46,57,88,99];
index = binarySearch(a ,11 ,88);
print( index )