二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好;其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。
首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。
由於此演算法理解起來簡單,就不多說什麼了。。
遞迴實現:
package hello.ant;
public class alogbinarysearch2 ;
int pos=binarysearch(array,0,array.length-1,8);
system.out.println(pos);
} static int binarysearch(int array,int begin,int end, int x) else else if(x
結果:mid==3
mid==5
5
非遞迴實現:
package hello.ant;
public class alogbinarysearch ;
int pos=binarysearch(array,7);
system.out.println(pos);
} static int binarysearch(int array, int x) else if(x
mid==3
mid==5
mid==44-1
演算法二分查詢演算法篇
困而學,學而知 什麼是二分查詢演算法呢?首先需要說明的是,只要在陣列有序的情況下,二分查詢才是有用。如果是乙個無序的陣列,二分查詢就沒有意義了。現在有1 100個數,當然是有序的,現在需要你猜乙個數。你每猜一次,我告訴你猜大了還是猜小了,那麼現在開始吧。現在有三種方案 從1按照順序猜 我們來看看這種...
演算法基礎 二分查詢函式 二分演算法
一 寫乙個函式binaryseach,在包含size個元素的 從小到大排序的int數a裡查詢元素p,如果找到,則返回元素下標,如果找不到,則返回 1。要求複雜度o log n int binarysearch int a,int size,int p return 1 複雜度o log n 二 寫乙...
演算法基礎 二分查詢
二分查詢主要是為了解決 在一堆數中找出指定的數 這類問題。要想二分查詢,這一堆數必須有以下特徵 至於是順序遞增還是遞減,是否存在相同的元素都不要緊。include include using namespace std int binarysearch int array,int low,int h...