上一節 末尾提到了乙個問題,在順序陣列中找到t值第一次出現的位置。
其實這也是一種二分搜尋的變形。
思路如下:我仍然使用l和u作為陣列的邊界值,t就包含在l和u指示的陣列範圍中。但不變關係式變為x[l]=0,x[-1]=t(程式中並沒有這兩個元素)。二分搜尋的**如下
1int binarysearch(int a,int n,int t)//
n為a陣列的長度,t為尋找的元素28
9int low=-1;10
int high=n;
11int
middle;
12while(low+1!=high)
1319
else
//此時的條件改為a[middle]>=t而不是原先的程式需要比較兩次
202324}
25if(high>=n||a[high]!=t)
2629
else
3033 }
此程式的好處是在while迴圈中只需要將陣列a中的值與t值比較一次,而不是前文中的兩次。有時候看似很細微的差別就可以對效能造成舉足輕重的影響。
二分搜尋的總結 續
前面已經有介紹二分搜尋的了,這裡再次貼出乙個 這是 程式設計珠璣 第九章,對二分搜尋的最後的優化。還和前面一樣,分成三個子程式,第乙個函式binarysearch是典型的二分搜尋,只不過把三次比較換成了兩次,第二個函式binarysearchge是返回搜尋值target的最左邊的乙個,如果不存在,就...
Java 二分搜尋 二分查詢
對陣列元素進行逐個查詢顯然是費時費力的工作,我們可以使用一些方法快速地搜尋出陣列中元素的指定位置.接下來我們介紹一種方法 二分搜尋法 二分搜尋法充分利用了元素間的次序關係.基本思想 將n元素分成個數大致相同的涼拌,取arr n 2 與欲查詢的x做比較,如果 下面將採用兩種方式 遞迴 非遞迴 來展示二...
二分(二分答案 二分搜尋)與單調性
經典二分搜尋是二分空間範圍。二分答案又叫二分猜值,是二分解的值空間。其實可以統一,普通的二分搜尋也是二分答案值域 下標空間,也是猜值。二分必須滿足單調性,最直觀的,二分搜尋只能在有序陣列上進行。單調性體現在,下標和元素值是單調的,也就是 if j i 有 a j a i 一般二分答案解決的問題是最優...