二分尋找(binary search)java實現及時間複雜度,binaryjava

來源:互聯網
上載者:User

二分尋找(binary search)java實現及時間複雜度,binaryjava
概述

在一個已排序的數組seq中,使用二分尋找v,假如這個數組的範圍是[low...high],我們要的v就在這個範圍裡。尋找的方法是拿low到high的正中間的值,我們假設是m,來跟v相比,如果m>v,說明我們要尋找的v在前數組seq的前半部,否則就在後半部。無論是在前半部還是後半部,將那部分再次折半尋找,重複這個過程,知道尋找到v值所在的地方。
實現二分尋找可以用迴圈,也可以遞迴。

java實現迴圈
public static int iterativeSearch(int v, int[] seq) {        int low = 0, high = seq.length - 1;        while (low < high) {            int mid = (low + high) / 2;            int m = seq[mid];            if (v == m) {                return mid;            } else if (v > m) {                low = mid + 1;            } else {                high = mid - 1;            }        }        return -1;    }
}
遞迴
public static int recursionSearch(int v, int low, int high, int[] seq) {        if (low > high) return -1;        int mid = (low + high) / 2;        int m = seq[mid];        if (v == m) {            return mid;        } else if (v > m) {            return recursionSearch(v, mid + 1, high, seq);        } else {            return recursionSearch(v, low, mid - 1, seq);        }    }}
java8原生實現
private static int binarySearch0(int[] a, int fromIndex, int toIndex,                                     int key) {        int low = fromIndex;        int high = toIndex - 1;        while (low <= high) {            int mid = (low + high) >>> 1;            int midVal = a[mid];            if (midVal < key)                low = mid + 1;            else if (midVal > key)                high = mid - 1;            else                return mid; // key found        }        return -(low + 1);  // key not found.    }
時間複雜度

比如:總共有n個元素,每次尋找的區間大小就是n,n/2,n/4,…,n/2^k(接下來操作元素的剩餘個數),其中k就是迴圈的次數。 
由於n/2^k取整後>=1,即令n/2^k=1, 
可得k=log2n,(是以2為底,n的對數),所以時間複雜度可以表示O()=O(logn)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.