二分查找算法例子

最近學習了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; // 沒找到目標元素,直接返回
    }
}

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章