二分法查詢(遞迴實現)
二分查詢
給定一個有序陣列,在陣列中查詢是否存在給定的一個整數,如果存在則返回陣列中全部等於該數的數的索引。
思路:
將陣列從某個位置一分為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;
}
}
相關文章
- Java實現遞迴查詢樹結構Java遞迴
- 二分法的簡單實現——-遞迴和非遞迴遞迴
- SqlServer遞迴查詢SQLServer遞迴
- PostgreSQL 遞迴查詢SQL遞迴
- sqlalchemy 遞迴查詢SQL遞迴
- 遞迴查詢子元素遞迴
- SQL server資料庫with as子句與遞迴查詢的實現SQLServer資料庫遞迴
- 二分查詢的兩種實現形式遞迴和迭代遞迴
- java-遞迴(檔案查詢)Java遞迴
- 遞迴-M--二分查詢遞迴
- 遞迴樹形查詢所有分類遞迴
- python 遞迴和二分法Python遞迴
- 棧實現遞迴遞迴
- lambda實現遞迴遞迴
- iOS 演算法之排序、查詢、遞迴iOS演算法排序遞迴
- 資料庫遞迴查詢:MySQL VS Sequelize資料庫遞迴MySql
- 透過遞迴查詢應用依賴遞迴
- 第二章 :查詢與排序---------遞迴、查詢與排序補充排序遞迴
- 簡單C#遞迴(向前查詢上工序)C#遞迴
- 遞迴實現原則遞迴
- 第二章 :查詢與排序-------二分查詢的遞迴解法排序遞迴
- 五、二分法查詢
- 記錄一次遞迴查詢的運用遞迴
- 手把手教你用java實現資料結構(五)-----查詢(二分法),遞迴(斐波那契數列,漢諾塔)演算法Java資料結構遞迴演算法
- 利用 Python 爬蟲實現快遞物流資訊查詢Python爬蟲
- 陣列的查詢(搜尋):線性查詢和二分法查詢陣列
- Python 實現二分法快速查詢Python
- GO -冒泡 二分法查詢Go
- python-動態規劃的遞迴、非遞迴實現Python動態規劃遞迴
- Python遞迴函式,二分查詢演算法Python遞迴函式演算法
- 同事問我MySQL怎麼遞迴查詢,我懵逼了MySql遞迴
- 遞迴和非遞迴分別實現求n的階乘遞迴
- 尾遞迴實現深複製遞迴
- c#遞迴實現 階乘C#遞迴
- C#實現FFT(遞迴法)C#FFT遞迴
- springBoot + 工廠模式 實現 快遞鳥、順豐和快遞100的物流查詢Spring Boot模式
- Android遍歷所有控制元件的遞迴和非遞迴實現Android控制元件遞迴
- 全域性元件實現遞迴樹,避免迴圈引用元件遞迴