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

  • 相关阅读:
    hadoop12---java并发编程的一些总结
    hadoop11----socket
    springboot-vue项目后台2---pojo对查询结果手动分组
    hadoop10---消息队列
    hadoop09----线程池
    hadoop08---读写锁
    hadoop07---synchronized,lock
    hadoop06---多线程
    Java Applet与Java Application的区别
    HTML中id、name、class 区别
  • 原文地址:https://www.cnblogs.com/liuyanmin/p/5146532.html
Copyright © 2011-2022 走看看