二分法查詢(遞迴實現)
二分查詢
給定一個有序陣列,在陣列中查詢是否存在給定的一個整數,如果存在則返回陣列中全部等於該數的數的索引。
思路:
將陣列從某個位置一分為2,判斷是否大於該位置的數。若等於,則建立一個集合,將該位置的索引放入集合,並向左搜尋,若相等,繼續將索引放入集合,直到發現一個數小於該數,則停止;之後繼續向右搜尋,,繼續將索引放入集合,直到發現一個數大於該數,則停止,並返回集合。如果發現如果大於,則重複之前的步驟,將後半部分繼續按某個位置分為兩部分,若小於,也繼續重複上面的步驟。最終返回的集合中的元素就是我們想要的一個數在一個一個陣列中的索引。如果不存在,則返回一個空的陣列。
程式碼如下:
public static ArrayList< Integer > binarySearch(int[] arr, int value, int left, int right) {
if (left > right) {
return new ArrayList<Integer>();
}
int mid = (left + right) / 2;
//像左遞迴
if (arr[mid] > value) {
return binarySearch(arr, value, 0, mid - 1);
}
//向右遞迴
else if (arr[mid] < value) {
return binarySearch(arr, value, mid + 1, right);
}
//找到了相同的值之後
else {
ArrayList< Integer > list = new ArrayList();
list.add(mid);
int m = mid;
int n = mid;
//向左繼續查詢
while (n > left && arr[n - 1] == value) {
list.add(n - 1);
n--;
}
//向右繼續查詢
while (m < right && arr[m + 1] == value) {
list.add(m + 1);
m++;
}
return list;
}
}
相關文章
- Mysql 實現樹狀遞迴查詢MySql遞迴
- oracle中的遞迴sql查詢 connect by prior實現遞迴Oracle遞迴SQL
- Java實現遞迴查詢樹結構Java遞迴
- Sql Server 使用CTE實現遞迴查詢SQLServer遞迴
- 關於樹型結構資料遞迴查詢,轉非遞迴查詢的實現遞迴
- 二分法的簡單實現——-遞迴和非遞迴遞迴
- oracle中connect by prior實現遞迴查詢Oracle遞迴
- 【演算法拾遺】二分查詢遞迴非遞迴實現演算法遞迴
- PostgreSQL 遞迴查詢SQL遞迴
- PostgreSQL=>遞迴查詢SQL遞迴
- SqlServer遞迴查詢SQLServer遞迴
- ORACLE 遞迴查詢Oracle遞迴
- sqlalchemy 遞迴查詢SQL遞迴
- SQL Server遞迴查詢SQLServer遞迴
- Oracle遞迴查詢sqlOracle遞迴SQL
- 一個遞迴查詢遞迴
- 遞迴查詢子元素遞迴
- java實現的二分法查詢Java
- SQL server資料庫with as子句與遞迴查詢的實現SQLServer資料庫遞迴
- sql無限遞迴查詢SQL遞迴
- grep遞迴查詢子目錄遞迴
- sql遞迴查詢子級SQL遞迴
- Oracle SQL的遞迴查詢OracleSQL遞迴
- 二分查詢的兩種實現形式遞迴和迭代遞迴
- java-遞迴(檔案查詢)Java遞迴
- MS SQL Server的遞迴查詢SQLServer遞迴
- 樹結構表遞迴查詢在ORACLE和MSSQL中的實現方法遞迴OracleSQL
- 遞迴-M--二分查詢遞迴
- 遞迴樹形查詢所有分類遞迴
- 我對Postgresql遞迴查詢的理解SQL遞迴
- 11GR2遞迴With子查詢遞迴
- MS SQL Server的遞迴查詢(2)SQLServer遞迴
- 棧實現遞迴遞迴
- lambda實現遞迴遞迴
- python 遞迴和二分法Python遞迴
- 樹結構表遞迴查詢在ORACLE和MSSQL中的實現方法 [續]遞迴OracleSQL
- python查詢演算法的實現-二分法Python演算法
- iOS 演算法之排序、查詢、遞迴iOS演算法排序遞迴