二分法查詢

2021-07-10 23:46:09 字數 818 閱讀 7071

二分法適合資料量很大的資料的查詢,該演算法要求:該組資料是有序的。

主要思想是:(設查詢的陣列區間為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 除了對特別小的陣列外,二分法查詢表現是非常優秀的.每次對範圍加倍可以建...