c 實現二分查詢

2021-07-31 20:07:16 字數 949 閱讀 6665

二分查詢又稱折半查詢,對排好序的陣列,每次取這個數和陣列中間的數進行比較,時間複雜度是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 即要查詢的值 那麼通...