首先我們要清楚使用我們的二分查詢演算法的前提條件:
二分查詢法只適用於從有序的數列中進行查詢(比如數字和字母等),將數列排序後再進行查詢
二分查詢的思路二分查詢會用到遞迴的思想,當然也有非遞迴的方式,我是分開來學習了
1.首先確定陣列的中間下標mid mid = (left+ right)/2
2.讓需要查詢的數findvalue和我們的arr[mid]比較
如果findvalue>arr[mid],往右邊遞迴找
如果findvalue 如果正好找到就返回
那我們的遞迴出口(結束條件)是什麼
1.找到了,直接返回退出了
2.遞迴萬整個陣列,沒有找到findvalue,也需要結束遞迴時,當我們的left>right就代表要結束了
那我們的非遞迴方式是怎麼來查詢呢
非遞迴**
public
class
binnarysearchnorecur
;int index =
binnarysearch
(arr,11)
; system.out.
println
(index);}
/** //二分查詢的非遞迴實現
* @param arr 待查詢陣列 該陣列公升序
* @param target 待查詢的值
* @return 找到返回對應下標,沒找到返回-1
*/public
static
intbinnarysearch
(int
arr,
int target)
else
if(arr[mid]
> target)
else
}return-1
;}}
我們發現沒有以前的向左遞迴向右遞迴了,我們是通過了while迴圈來控制我們的方法一直在進行,動態改變我們的left和right的值,達到遞迴相同的效果 二分查詢(遞迴與非遞迴方式)
test public void testbinarysearch 非遞迴實現,返回對應的序號 system.out.println binarysearch arr,5 遞迴實現,返回對應的序號 system.out.println binsearch arr,5 非遞迴實現,返回對應的序號 au...
二分查詢(遞迴 非遞迴)
二分查詢是一種查詢效率非常高的查詢演算法。又稱折半查詢。起初在資料結構中學習遞迴時實現二分查詢,實際上不用遞迴也可以實現,畢竟遞迴是需要開闢額外的空間的來輔助查詢。本文就介紹兩種方法 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。使用條件 查詢序...
二分查詢的遞迴和非遞迴方式
1.典型的二分查詢的兩種方式 注意二分查詢的適用條件是遞增的陣列 1 遞迴方式 class binarytree system.out.println search a,12,0,a.length 1 public static int search int a,int data,int low,i...