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
    	}
    
    }
    

  • 相关阅读:
    周末给女友讲了遍加密算法,没想到...
    gradle执行打包并导出Apk到指定文件夹
    功能算法
    位运算之异或运算
    禁止ViewPager滑动
    macOS 去掉系统软件更新红点提示
    【转】Kotlin的inline内联函数
    Android Gradle Plugin v3.6.0/3.6.1 构建Bug
    IntelliJ IDEA UML插件
    【LeetCode 1. Two Sum】
  • 原文地址:https://www.cnblogs.com/liuyanmin/p/5146532.html
Copyright © 2011-2022 走看看