二分查詢演算法的前提:陣列必須是有序陣列二分查詢演算法思路分析(遞迴版):如果 mid == findval ,查詢到目標值,返回即可
編寫二分查詢演算法:
1.查詢到目標值就返回
//注意:使用二分查詢的前提是 該陣列是有序的.
public
class
binarysearch
;int resindex =
binarysearch
(arr,
0, arr.length -1,
1000);
system.out.
println
("resindex="
+ resindex);}
// 二分查詢演算法
/** *
* @param arr 陣列
* @param left 左邊的索引
* @param right 右邊的索引
* @param findval 要查詢的值
* @return 如果找到就返回下標,如果沒有找到,就返回 -1
*/public
static
intbinarysearch
(int
arr,
int left,
int right,
int findval)
int mid =
(left + right)/2
;int midval = arr[mid];if
(findval > midval)
else
if(findval < midval)
else
}}
resindex=
4
2. 二分查詢(返回滿足目標值的所有值)編寫二分查詢演算法:查詢到所有目標值,在找到目標值之後,分別往左、往右進行擴散搜尋
//注意:使用二分查詢的前提是 該陣列是有序的.
public
class
binarysearch
; list
resindexlist =
binarysearch
(arr,
0, arr.length -1,
1000);
system.out.
println
("resindexlist="
+ resindexlist);}
// 完成乙個課後思考題:
/* * 課後思考題: 當乙個有序陣列中, 有多個相同的數值時,如何將所有的數值都查詢到,比如這裡的
* 1000
* * 思路分析 1. 在找到mid 索引值,不要馬上返回 2. 向mid 索引值的左邊掃瞄,將所有滿足 1000, 的元素的下標,加入到集合arraylist
* 3. 向mid 索引值的右邊掃瞄,將所有滿足 1000, 的元素的下標,加入到集合arraylist 4. 將arraylist返回
*/public
static list
binarysearch
(int
arr,
int left,
int right,
int findval)
int mid =
(left + right)/2
;int midval = arr[mid];if
(findval > midval)
else
if(findval < midval)
else
// 否則,就temp 放入到 resindexlist
resindexlist.
add(temp)
; temp -=1;
// temp左移
} resindexlist.
add(mid);//
// 向mid 索引值的右邊掃瞄,將所有滿足 1000, 的元素的下標,加入到集合arraylist
temp = mid +1;
while
(true
)// 否則,就temp 放入到 resindexlist
resindexlist.
add(temp)
; temp +=1;
// temp右移
}return resindexlist;}}
}
程式執行結果
resindexlist=[4
,5,6
]
二分查詢演算法解析
參考文章 二 分查詢,你真的掌握了嗎?目標 在乙個有序的陣列中,找出指定資料所處的位置。時間複雜度就是重複次數的同一量級 order 通俗講就是迴圈次數的同一量級啦。這樣看,初始時,查詢範圍大小為n 陣列的長度 第一次迴圈後,查詢範圍大小為n 2 第二次迴圈後,查詢範圍大小為n 4 第三次迴圈後,查...
二分查詢演算法原理和實現
二分查詢是一種比較高效的搜尋演算法,是一種可以在有序陣列中搜尋到特定元素的演算法。例如,我們要在陣列中搜尋4 還是先找到陣列的中間位置,這次因為是偶數,我們就取1吧 這裡是按照自己取中間位置的演算法實際去取 4比1小,那麼要往右邊陣列搜尋,右邊陣列即為 那麼,陣列只有乙個元素,那麼中間位置肯定就是自...
二分查詢演算法的理解
在做lis的o nlgn 演算法時,用到了二分查詢演算法。對於其中的一些條件,例如 l二分查詢因為有幾個限制,其中乙個便是 單調序列 這個要求,所以可能出現 2 3 4 4 4 5 6這樣的陣列,那麼返回第乙個出現的位置便是 i 3時。i0 1234 56a i 23 4445 6while lef...