查詢 二分查詢

2021-09-11 08:12:20 字數 1545 閱讀 4446

參考:

原始碼:目錄:順序查詢

二分查詢

插值查詢

斐波那契查詢

分塊查詢

雜湊查詢

二叉樹查詢

紅黑樹查詢

演算法簡介

二分查詢(binary search),是一種在有序陣列中查詢某一特定元素的查詢演算法。查詢過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則查詢過程結束;如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。如果在某一步驟陣列為空,則代表找不到。

這種查詢演算法每一次比較都使查詢範圍縮小一半。

演算法描述 

給予乙個包含n個帶值元素的陣列a

1、 令 l為0 , r為 n-1 ;

2、 如果l>r,則搜尋以失敗告終 ;

3、 令 m (中間值元素)為  ⌊(l+r)/2⌋;

4、 如果 amt,令 r為 m - 1 並回到步驟二;

複雜度分析 

時間複雜度:折半搜尋每次把搜尋區域減少一半,時間複雜度為 o(logn) 

空間複雜度:o(1)

演算法實現

/**

* 非遞迴寫法

* @param list

* @param selectvalue

* @return

*/private static int select2(listlist, int selectvalue)

int start = 0;

int end = list.size() - 1;

while (end > start) else if (list.get(middleindex) < selectvalue) else

}return -1;

}/**

* 遞迴寫法

* @param list

* @param selectvalue

* @return

*/private static int select(listlist, int selectvalue)

return loopselect(list, 0, list.size() - 1 , selectvalue);

}private static int loopselect(listlist, int startindex, int endindex, int selectvalue)

int middleindex = (endindex + startindex)/2;

if (list.get(middleindex) > selectvalue)else if (list.get(middleindex) < selectvalue)

return middleindex;

}

迭代二分查詢二分查詢

在寫這篇文章之前,已經寫過了幾篇關於改迭代二分查詢主題的文章,想要了解的朋友可以去翻一下之前的文章 bentley在他的著作 writing correct programs 中寫道,90 的計算機專家不能在2小時內寫出完整確正的二分搜尋演算法。難怪有人說,二分查詢道理單簡,甚至小學生都能明確。不過...

查詢 二分查詢

二分查詢也稱折半查詢 binary search 它是一種效率較高的查詢方法。但是,折半查詢要求線性表必須採用順序儲存結構,而且表中元素 按關鍵字有序排列 首先,假設表中元素是按 公升序排列 將表中間位置記錄的 關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置 記錄將表分成前 後兩...

查詢 二分查詢

二分查詢也叫做折半查詢,查詢的物件是已經排好序的序列 一般預設為公升序 讓我們來看看原理 顧名思義,就是先將中間數和目標key比較,如果相等則返回其索引,否則把序列分成兩半,根據大小判斷所查詢的key在哪一半中,對這一半序列再重複上述步驟,直到找到目標key或查詢完序列。被查詢的序列arr中無重複的...