二分查詢是電腦科學中最基本、最有用的演算法之一。它描述了在有序集合中搜尋特定值的過程。
二分法的精髓
每次運算可以去除一半的不符合條件的元素。很大程度的減小了時間複雜度
二分法的常用術語為
1.target目標值
2.index目標的索引
3.left、right、mid三個索引
二分法解題步驟:
1.預處理過程(將無序陣列排序成有序陣列)
2.二分查詢(找到合適的判斷條件,每次可以篩選掉一半的不符合條件的元素)
3.後處理過程(不斷查詢直到找到目標值)
二分查詢基本模板
public
intbinarysearch
(int a,
int target)
else
if(a[mid]
>target)
else
}//迴圈結束都沒有找到目標值target
return-1
;}
一般需要考慮的幾個條件:
1.初始條件:left=? right=?
2.終止條件:left總結
二分法思想雖然非常簡單,但是對細節的要求非常高。對於每次比較之後mid的值該怎樣變化需要仔細思考,很容易就會出錯而無法求出正確的值。所以這類題對於細節的把控非常重要,有時間的話之後再總結一些相關題目來實戰練習。
一文秒殺二分查詢所有題目
思想及實現 這是學演算法的入門演算法,先舉個最簡單的例子 猜數字1 我心中默念乙個數字,範圍在1 100,你每次可以猜乙個數,我會回答你大了,小了,直到猜中為止。答 比如假設要猜的數字是38,整個過程如下 猜測範圍 1,100 猜50,大了。所以比50大的都不用考慮了,包括50。猜測範圍 1,49 ...
二分查詢與快速排序
可以在在二分查詢前進行排序,提高查詢效率。qsort 快速排序,需要自定義比較函式 和bsearch 配合使用。void qsort void base,size t nitems,size t size,int compar const void const void void bsearch c...
分治專題(二分查詢與快速冪)
這個大周由於嶽老師的一句話,我對程式的認識又有了巨大的改變。人活著不能一成不變,我覺得每天只進步一點點還不夠,作為較好的一位,我就需要在相同的的時間內做更多的事情。於是,我就開始預習新知識,複習舊演算法,最近我複習了c 的二分這一塊,發現之前不會的明顯有所提高,大部分都能掌握了,比如說快速冪與二分查...