爪哇國新遊記之二十七----數組的二分尋找

來源:互聯網
上載者:User

標籤:style   blog   color   java   for   ar   代碼   div   

代碼:

import java.util.ArrayList;import java.util.List;public class Bit {    int max;    int min;    int[] arr;    public Bit(int[] arrInput) {        // 找出極值        for (int i = 0; i < arrInput.length; i++) {            if (max < arrInput[i]) {                max = arrInput[i];            }            if (min > arrInput[i]) {                min = arrInput[i];            }        }        // 建立數組        arr = new int[max - min + 1];        // 數組插值        for (int i : arrInput) {            int index = i - min;            arr[index]++;        }    }    public boolean hasDuplicateItem() {        for (int i = 0; i < arr.length; i++) {            int value = arr[i];            if (value > 1) {                return true;            }        }        return false;    }    public List<Integer> getSortedList() {        List<Integer> ls = new ArrayList<Integer>();        for (int i = 0; i < arr.length; i++) {            int value = arr[i];            if (value != 0) {                for (int j = 0; j < value; j++) {                    ls.add(min + i);                }            }        }        return ls;    }    public List<Integer> getUniqueSortedList() {        List<Integer> ls = new ArrayList<Integer>();        for (int i = 0; i < arr.length; i++) {            int value = arr[i];            if (value != 0) {                ls.add(min + i);            }        }        return ls;    }        public int[] getUniqueSortedArray(){        List<Integer> ls=getUniqueSortedList();                int[] arr=new int[ls.size()];                for(int i=0;i<arr.length;i++){            arr[i]=ls.get(i);        }                return arr;    }    /**     * 二分尋找     *      * @param sortedArray     *            已排序的欲尋找的數組     * @param seachValue     *            尋找的值     * @return 找到的元素下標,若找不到則返回-1     */    public static int binSearch(int[] sortedArray, int seachValue) {        // 左邊界        int leftBound = 0;        // 右邊界        int rightBound = sortedArray.length - 1;        // 當前下標位置        int curr;        while (true) {            // 定位在左邊界和右邊界中間            curr = (leftBound + rightBound) / 2;            if (sortedArray[curr] == seachValue) {                // 找到值                return curr;            } else if (leftBound > rightBound) {                // 左邊界大於右邊界,已經找不到值                return -1;            } else {                if (sortedArray[curr] < seachValue) {                    // 噹噹前下標對應的值小於尋找的值時,縮短左邊界                    leftBound = curr + 1;                } else {                    // 噹噹前下標對應的值大於尋找的值時,縮短右邊界                    rightBound = curr - 1;                }            }        }    }    public static void main(String[] args) {        int[] arr = { -2, -1, 3, 5, 7, 9, 30, 4, -2, 5, 8, 3 };        Bit b = new Bit(arr);        System.out.println("排序後數組");        int[] arr2=b.getUniqueSortedArray();        for(int i=0;i<arr2.length;i++){            System.out.println(i+":"+arr2[i]);        }                int[] arr3={2,5,7,-2,90};                for(int i=0;i<arr3.length;i++){            int index=Bit.binSearch(arr2, arr3[i]);            if(index!=-1){                System.out.println(arr3[i]+"排在數組arr2的第"+index+"個");            }else{                System.out.println(arr3[i]+"不在數組arr2中");            }        }    }}

輸出:

排序後數組0:-21:-12:33:44:55:76:87:98:302不在數組arr2中5排在數組arr2的第4個7排在數組arr2的第5個-2排在數組arr2的第0個90不在數組arr2中

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.