二分法適合資料量很大的資料的查詢,該演算法要求:該組資料是有序的。
主要思想是:(設查詢的陣列區間為array[low,high])
(1)確定該期間的中間位置k
(2)將查詢的值t與array[k]比較。若相等,查詢成功返回此位置;否則確定新的查詢區域,繼續二分查詢。其演算法的時間複雜度為log(n).
剛寫二分法時,考慮片刻,寫下如下**(注意:有bug):
int bisection(int
*p,int
size,int n)
else
if(p[k]2;
}else
return k;
}return -1;
}
測試用例
int main()
; int b = bisection(a,10,5);
printf("%d",b);
}
測試結果,似乎一切正常,但是,但測試到陣列的最後乙個元素時,程式進入死迴圈,斷點除錯檢視,發現當程式執行到i=8,j=9時,k=(i+j)/2一直為8,導致死迴圈。是乙個典型的邊界條件未滿足導致的bug。
如下修改**:
int bisection(int
*p,int
size,int n)
else
if(p[k]1; //修改這裡
k=(i+j)/2;
}else
return k;
}return -1;
}
C 二分法查詢,遞迴二分法
用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...
python二分法查詢 Python 二分法查詢
二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...
二分法查詢
前幾天csdn上說只有10 程式設計師能寫出正確的二分法查詢 so.我在看過二分法查詢方法後寫了乙個 一次測試成功.範圍 需要次數 10 4 100 7 1000 10 10000 14 100000 17 1000000 20 除了對特別小的陣列外,二分法查詢表現是非常優秀的.每次對範圍加倍可以建...