最近學習了java的集合相關部分知識,較之前比較深入地學習了這部分內容,特別是Map部分的HashMap,在JDK1.8之後,HashMap加入了紅黑樹。爲什麼加入了紅黑樹呢?這是因爲紅黑樹的增刪改查的速度都是非常快的,尤其是查詢的速度,爲什麼查詢的速度很快,主要是得益於底層的二分搜索算法。
本文主要來介紹一下二分搜索算法的思想,然後通過一個例子來進行演示、說明,希望大家和自己可以更好的理解、記住這個常用、重要的搜索算法。話不多說,下面開始進入正題。
我們先看看百度的解釋:
首先,假設表中元素是按升序排列,將表中間位置記錄的關鍵字與查找關鍵字比較,如果兩者相等,則查找成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查找關鍵字,則進一步查找前一子表,否則進一步查找後一子表。重複以上過程,直到找到滿足條件的記錄,使查找成功,或直到子表不存在爲止,此時查找不成功。
直接代碼理解:
package com.xjyk.project.tool.swagger;
/**
* 二分搜索算法
*/
public class BinarySearch {
public static void main(String[] args) {
int[] arr = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// 二分搜索元素特定元素'8'
int result = binarySearch(arr, 8);
System.out.println(result);
}
// 二分搜索元素
private static int binarySearch(int[] newArr, int target) {
int startIndex = 0; // 搜索範圍開始位置
int endIndex = newArr.length - 1; // 搜索範圍結束位置
while (startIndex <= endIndex){ // 判斷條件,開始位置大於結束位置查找結束
int center = newArr[endIndex / 2]; // 獲取中間位置索引
if (newArr[center] == target){ // 相等直接返回索引
return center;
}else if (newArr[center] > target){ // 大於,往左邊查找
endIndex = center -1;
}else { // 小於,往右邊查找
startIndex = center + 1;
}
}
return -1; // 沒找到目標元素,直接返回
}
}