二分查詢又稱折半查詢,對排好序的陣列,每次取這個數和陣列中間的數進行比較,時間複雜度是o(logn)。
設陣列為a[n],查詢的數x,如果x==a[n/2],則返回n/2;
如果x < a[n/2],則在a[0]到a[n/2-1]中進行查詢;
如果x > a[n/2],則在a[n/2+1]到a[n-1]中進行查詢;
優點是比較次數少,查詢速度快,平均效能好;其缺點是要求待查表為有序表,且插入刪除困難。
條件:查詢的陣列必須要為有序陣列。
1.遞迴實現
/*
歸的二分查詢
arrat:陣列 , low:上界; high:下界; target:查詢的資料; 返回target所在陣列的下標
*/
int binarysearch(int array, int low, int high, int target)
if(target == array[middle])
if(target < array[middle])
if(target > array[middle])
}
2.迴圈實現
/*
非遞迴的二分查詢
arrat:陣列 , n:陣列的大小; target:查詢的資料; 返回target所在陣列的下標
*/
int binarysearch2(int array, int n, int target) else if(target < array[middle]) else if(target > array[middle])
} return -1;
}
推薦使用非遞迴的方式,因為遞迴每次呼叫遞迴時有用堆疊儲存函式資料和結果。能用迴圈的盡量不用遞迴。
c 實現二分查詢
二分查詢又稱折半查詢,對排好序的陣列,每次取這個數和陣列中間的數進行比較,複雜度是 o logn 如 設陣列為 a n 查詢的數x,如果x a n 2 則返回 n 2 如果 x a n 2 則在 a 0 到a n 2 1 中進行查詢 如果x a n 2 則在a n 2 1 到a n 1 中進行查詢 ...
C 實現二分查詢
所謂的二分查詢,在一組遵循一定規律的數中查詢自己想要的數,這裡以一組從小到大排好的陣列為例進行二分查詢,二分思想如下 假設你要找 n 那麼先讓 n 與陣列中間的數比較,縮小一半區間,如果 n 比中間的數大,那麼以後半部分作為新的查詢區間,讓 n 與新區間的中間數比較,再根據大小重新縮小一半的區間,直...
C 實現二分查詢演算法
想必二分查詢很多人都不陌生,或許說很熟悉,但是在實際生活中又有很多人不能正確的寫出它的相應 因為二分查詢的邊界條件等很難控制,下面我們來仔細的分析一下二分查詢,這只是個人看法,如有異議,歡迎提出。1 二分查詢可以解決的問題 二分查詢可以解決預排序陣列的查詢問題。只要陣列中包含t 即要查詢的值 那麼通...