三、Java版二分法算法

一、核心思想

選定這批數(shù)據(jù)中居中間位置的一個(gè)數(shù)與所查數(shù)比較,看是否為所找的數(shù),若不是,則利用數(shù)據(jù)的有效性,可以決定所找的數(shù)是在選定數(shù)的左側(cè)還是右側(cè),從而很快可以將查找范圍縮小一半。以同樣的方法在選定區(qū)域中進(jìn)行查找,每次都會(huì)將查找范圍縮小一半,從而較快的找到目的數(shù)。
有個(gè)限制條件就是:必須是有序數(shù)組!

二、源碼

package com.ctw;

/**
 * @author TongWei.Chen 2018-09-25 16:20:15
 * @Description:
 * @Project sjjg-sf
 */
public class BinaryFind {

    /**
     * 二分查找
     *
     * @param arr:數(shù)組
     * @param value:所需要找的值
     * @return: 目的值所在數(shù)組的下標(biāo)
     */
    public static int binaryFind(long[] arr, long value) {
        // 開(kāi)始值
        int start = 0;
        // 末尾值
        int end = arr.length - 1;
        while (start <= end) {
            // 中間值,二分法嘛,先取個(gè)中再說(shuō),每次進(jìn)行二分的時(shí)候都需要重新計(jì)算中間值,所以放到循環(huán)里面。
            int middle = (start + end) / 2;
            // 1.如果碰巧了,目標(biāo)值直接就是中間值
            if (value == arr[middle]) {
                return middle;
            } else if(value < arr[middle]) {
                // 2.若目標(biāo)值比中間值小,那肯定是在中間值左側(cè),則繼續(xù)從0到中間值這區(qū)間進(jìn)行二分查找。
                end = middle - 1;
            } else {
                // 3.若目標(biāo)值比中間值大,那肯定是在中間值右側(cè),則繼續(xù)從中間值到末尾值這區(qū)間進(jìn)行二分查找。
                start = middle + 1;
            }
        }
        // 若所找的數(shù)不在數(shù)組里,則返回-1;
        return -1;
    }

    public static void main(String[] args) {
        MyArray myArray = new MyArray();
        myArray.add(1L);
        myArray.add(2L);
        myArray.add(3L);
        myArray.add(4L);
        myArray.add(5L);
        myArray.add(6L);
        myArray.add(12L);
        myArray.add(20L);
        myArray.add(30L);
        myArray.add(33L);
        int index = binaryFind(myArray.getArr(), 331L);
        System.out.println(index);
    }

}

三、廣告

  • 碼云地址

    https://gitee.com/geekerdream/

  • QQ群【Java初學(xué)者學(xué)習(xí)交流群】:458430385

  • 微信公眾號(hào)【Java碼農(nóng)社區(qū)】

    img
  • 今日頭條號(hào):編程界的小學(xué)生

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 二十幾歲面對(duì)生活,驕傲的我怎么會(huì)認(rèn)輸呢?
    Efasit潤(rùn)萍閱讀 179評(píng)論 0 1
  • 我的小Lana 爸爸相信你定是個(gè)美麗的小女孩 有著你媽媽大大的眼睛 和她可愛(ài)的小嘴 我的小Lana 不知你可曾聽(tīng)到...
    LOYOL閱讀 374評(píng)論 0 0
  • ha?ru?du?du?e?l?l?l
    彼時(shí)風(fēng)光閱讀 214評(píng)論 0 0

友情鏈接更多精彩內(nèi)容