二分查找的基本思想是將n個元素分成大致相等的兩部分,取a[n/2]與x做比較,如果x=a[n/2],則找到x,算法中止;如果x<a[n/2],則只要在數組a的左半部分繼續搜索x,如果x>a[n/2],則只要在數組a的右半部搜索x.
時間復雜度無非就是while循環的次數!
總共有n個元素,
漸漸跟下去就是n,n/2,n/4,....n/2^k(接下來操作元素的剩余個數),其中k就是循環的次數
由於你n/2^k取整后>=1
即令n/2^k=1
可得k=log2n,(是以2為底,n的對數)
所以時間復雜度可以表示O(h)=O(log2n)
C語言實現的代碼如下:
#include <stdio.h>
#include <stdlib.h>
//二分查找算法,找不到就返回-1,找到了就返回值
int binary_search(int * list,int len,int target){
int low = 0;
int hight = len-1;
int middle;
while(low <= hight){
middle = (low + hight)/2;
if(list[middle] = target)
{
printf("已找到該值,數組下標為:%d\n",middle);
return list[middle];
}
else if(list[middle] > target)
{
hight = middle -1;
}
else if(list[middle] < target)
{
low = middle + 1;
}
}
printf("未找到該值");
return -1;
}
int main()
{
int a[] = {2,4,5,8,9,44};
int b = binary_search(a,sizeof(a)/4,5);
printf("b=%d\n",b);
printf("Hello world!\n");
return 0;
}
運行截圖:

