採用二分法查詢數字是用的比較多的一種方法
其演算法思想可以這樣理解:
比如有一行數:1 6 9 10 15
要找到其中某乙個數的位置,最簡單的一種演算法是窮舉法,顧名思義,就是遍歷這一行所有的數,比較,最後找到這個數,然後輸出位置,如果到最後還是沒有,就列印說沒有找到該數
這裡涉及到乙個概念,就是演算法時間複雜度(好像是這樣稱呼的)
窮舉演算法的複雜度是和n成一次函式的,所以複雜度是n,這樣沒有什麼不好,但是該演算法占用的時間比較長,所以效率比較低,程式的靈活性差
那麼怎麼辦?--該問題即轉化為如何避免過長的n呢?
可以用二分法的思想,注意:二分法只能用於序列有序的一列數
要查詢的數每次和中間的這個數比較,如果是大於middle,則說明該數在後半段,如果小於,說明該數在前半段,這樣就把窮舉數列縮短了一半,同理在下乙個數列中以此類推,都是一半一半進行比較比較,這樣總是1/2,有n個1/2,所以時間複雜度是log2n,時間複雜度遠遠小於窮舉演算法
下面是部分**:
int func(int a,int n,int i,int j)
if(a[mid]>n)
else
}else
//return (j+1);
/*if(i>j)
*/}
查詢演算法 二分法
二分查詢演算法的基本思想 一.首先確定該區間的中間元素位置 mid low high 2 mid代表區間內中間元素的位置 low代表區間內最左邊元素的位置 high代表區間內最右邊元素的位置 二.將待查key元素值與中間元素mid的值 array mid 比較,如果相等,則查詢成功,否則確定新的查詢...
演算法 二分法查詢
1 2 二分法實驗 31 設a 0 n 1 是乙個已排好序的陣列.4請改寫二分搜尋演算法,使得當搜尋元素x不在陣列中時,5返回小於x的最大元素的位置i和大於x的最大元素位置j.6當搜尋元素在陣列中時,i和j相同,均為x在陣列中的位置.72 設有n個不同的整數排好序後存放於t 0 n 1 中,8若存在...
演算法 二分法查詢
免費 二分法查詢主要是為了快速查詢給定陣列內,期待值在陣列中的位置 下標 二分法查詢通過對整個陣列取中間值,判斷期待值所在的範圍並縮小範圍,每次查詢範圍折半,直到範圍的邊界重合,得出期待值的位置,如果找不到返回null 二分法有乙個先決條件是 陣列內元素必須是有序的 給定乙個包含1,3,5,7,8,...