zoukankan      html  css  js  c++  java
  • Java-二分查找算法

    package com.lym.binarySearch;
    
    import java.util.Arrays;
    
    /**
     * 二分查找
     * 
     * @author Administrator
     * 
     */
    public class BinarySearchDemo {
    
    	public static void main(String[] args) {
    		int[] number = { 4, 2, 66, 12, 88, 95, 63, 1 };
    		Arrays.sort(number);// 先对数组排序,然后再进行二分查找
    		int index = binarySearch(number, 63);//parameter(int[],key)
    		System.out.println(index);
    	}
    
    	//二分查找
    	public static int binarySearch(int[] a, int n) {
    		rangeCheck(a.length,0,a.length-1);
    		return binarySearch0(a, 0, a.length, n);
    	}
    
    	//异常检测
    	private static void rangeCheck(int length, int fromIndex, int toIndex) {
    		if (fromIndex > toIndex) {
                throw new IllegalArgumentException(
                    "fromIndex(" + fromIndex + ") > toIndex(" + toIndex + ")");
            }
            if (fromIndex < 0) {
                throw new ArrayIndexOutOfBoundsException(fromIndex);
            }
            if (toIndex > length) {
                throw new ArrayIndexOutOfBoundsException(toIndex);
            }
    	}
    	
    	//二分查找核心算法
    	private static int binarySearch0(int[] a, int fromIndex, int toIndex, int n) {
    		int low = fromIndex;
    		int high = toIndex - 1;
    
    		while (low <= high) {
    			int mid = (low + high) >>> 1;// middle index    采用移位运算符可以提高性能
    			int midVal = a[mid];// middle value
    
    			if (midVal > n)
    				high = mid - 1;
    			else if (midVal < n)
    				low = mid + 1;
    			else
    				return mid;//key found
    		}
    		return -(low + 1);// key no found
    	}
    
    }
    

  • 相关阅读:
    -1%256的值是多少?
    Glut,程序的基本架构
    剑指offer:数值的整数次方
    剑指offer:二进制中1的个数
    剑指offer:斐波那契数列的应用
    剑指offer:斐波那契数列
    剑指offer:旋转数组中的最小数字
    弱智的grub消除法
    POJ 3126 Prime Path
    HDU 1426 Sudoku Killer
  • 原文地址:https://www.cnblogs.com/liuyanmin/p/5146532.html
Copyright © 2011-2022 走看看