标签:
问题描述:
二分查找指定的int数组
问题分析:
时间复杂度为O(logN)
代码实现:
package c02;
/**
 * @project: DataStructureAndAlgorithmAnalysis
 * @filename: BinarySearch
 * @version: 0.10
 * @author: Jimmy Han
 * @date: 22:57 2015/7/7
 * @comment: Test Purpose
 * @result:
 */
public class BinarySearch {
    public static void main(String[] args) {
        int[] a = {1, 2, 7, 9, 9, 12, 15, 24, 30};
        System.out.println(binarySearch(a, 7));
        System.out.println(binarySearch(a, 12, 1, 6));
    }
    /**
     * Performs the standard binary search. Normal
     * @return index where item is found, or -1 if not found
     */
    public static int binarySearch(int[] a, int x){
        int low = 0, high = a.length - 1;
        while(low <= high){
            int mid = (low + high)/2;
            if(a[mid] < x)
                low = mid + 1;
            else if(a[mid]> x)
                high = mid - 1;
            else
                return mid;
        }
        return -1;
    }
    /**
     * Performs the standard binary search. Recursively.
     * @return index where item is found, or -1 if not found
     */
    public static int binarySearch(int[] a, int x, int beginidx, int endidx){
        if(x < a[beginidx] || x > a[endidx])
            return -1;
        int mididx = (beginidx + endidx)/2;
        if(a[mididx] < x)
            return binarySearch(a, x, mididx + 1, endidx);
        else if(a[mididx] > x)
            return binarySearch(a, x, beginidx, mididx - 1);
        else
            return mididx;
    }
} 
标签:
原文地址:http://my.oschina.net/jimmyhan/blog/475863