2018-05-05 二分查找

二分查找

二分查找的思想其實是為了減少搜索范圍,每次縮減一半,這樣就可以快速找到對象。

1.二分查找的對象

二分查找的對象是有序的數(shù)組。如果一個數(shù)組沒有按順序排好則無法應用二分查找。

2.二分查找用例

package com.mingguo.zjut.main;

public class BinarySearch {

    public static int rank(int key,int a[]){
        int L = 0;
        int R = a.length - 1;
        while(L<=R){
            int mid = L +(R-L)/2;
            if(a[mid]==key){
                return mid;
            }else if(a[mid] > key){
                R = mid - 1;
            }else if(a[mid] < key){
                L = mid + 1;
            }
        }
        return -1;
    }
    public static void main(String[] args) {
        int newArray [] = {
            1,2,3,4,5,6,7,8
        };
        System.out.println(rank(1,newArray));
    }

}

3.二分查找過程

上述二分查找代碼是用rank()函數(shù)實現(xiàn)的,該函數(shù)接受一個整數(shù)和一個已經(jīng)有序的int數(shù)組作為參數(shù)。如果該鍵存在于數(shù)組中則返回他的索引,否則返回-1。該算法使用了兩個變量L和R,并保證如果該鍵存在于數(shù)組中,則它一定在a[L..R]中,然后方法進入下一次的循環(huán),不斷的將數(shù)組的中間鍵(索引為mid)和被查找的鍵比較。如果查找的鍵等于a[mid],返回mid;否則算法就會將范圍縮小為原來的一半,如果被查找的鍵小于a[mid]就繼續(xù)在左半邊找,如果被查找的鍵大于a[mid]就繼續(xù)在右半邊找。算法找到該鍵或者查找范圍為空(L>R)時該過程結束。二分查找之所以快是因為它只需檢查很少幾個條目(相對于數(shù)組的大?。┚湍苷业侥繕嗽兀ɑ蛘叽_認目標元素不存在)。

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

相關閱讀更多精彩內容

  • 原文出處:http://www.cnblogs.com/maybe2030/p/4715035.html引文出處:...
    明教de教主閱讀 9,315評論 0 7
  • 1 前言 二分查找本身是個簡單的算法,但是正是因為其簡單,更容易寫錯。甚至于在二分查找算法剛出現(xiàn)的時候,也是存在b...
    __七把刀__閱讀 1,582評論 0 1
  • 數(shù)據(jù)結構與算法--查找之順序查找和二分查找 符號表的目的是將一個鍵和一個值關聯(lián)起來,可以將一對鍵值對插入到符號表中...
    sunhaiyu閱讀 1,920評論 1 2
  • 1 初級排序算法 排序算法關注的主要是重新排列數(shù)組元素,其中每個元素都有一個主鍵。排序算法是將所有元素主鍵按某種方...
    深度沉迷學習閱讀 1,599評論 0 1
  • 痛莫過于彼此有愛卻相互傷害,傷人者從不以為自己在傷人。人們往往很自信和自以為對的事要求朋友親人必須如何如何做,哪怕...
    追憶燈火闌珊閱讀 2,103評論 0 0

友情鏈接更多精彩內容