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

    Java中有自带Arrays 工具类

    Arrays.sort(data);

    int index = Arrays.binarySearch(data, 3);

    直接调用函数即可。index即为数组下标值。

    public class er{
    	public static void main(String[] args){
    		int[] arr = {0,1,2,3,4,5,6,7,8,9};
    		int a = 9;
    		//int m = BinSearch(arr,0,arr.length-1,a);
    		int m = BinSearch(arr,arr.length,a);
    		System.out.println(m);
    	}
    	/*
    	//递归
    	static int BinSearch(int Array[],int low,int high,int key)  
    	{  
    		if (low<=high)  
    		{
    			int mid = (low+high)/2;  
    			if(key == Array[mid])  
    				return mid; 
    			else if(key<Array[mid])  
    				//移动low和high
    				return BinSearch(Array,low,mid-1,key);
    			else if(key>Array[mid])
    				return BinSearch(Array,mid+1,high,key);
    		}  
    		return -1;  
    	} 
    	*/
    	/*
    	//递归
    	public static int BinSearch(int[] arr,int begin,int end,int a){
    		if (begin<=end)
    		{
    			int mid = (begin+end)/2;
    			if (arr[mid] == a){
    			//System.out.println("1");
    			return mid;
    			}
    			else if (arr[mid] < a){
    				return BinSearch(arr,mid+1,end,a);
    				//System.out.println("2 "+mid+" "+end);
    			}
    			else if (arr[mid] > a){
    				return BinSearch(arr,begin,mid-1,a);
    				//System.out.println("3"+begin+" "+mid);
    			}
    		}
    		
    		return -1;
    	}
    	*/
    
    	//普通循环
    	public static int BinSearch(int[] a, int len, int goal)
    	{
    		int low = 0;
    		int high = len -1;
    		while (low <= high)
    		{
    			int middle = (high - low) / 2 + low; // 直接使用(high + low) / 2 可能导致溢出
    			if (a[middle] == goal)
    				return middle;
    			//在左半边
    			else if (a[middle] > goal)
    				high = middle - 1;
    			//在右半边
    			else
    				low = middle + 1;
    		}
    		//没找到
    		return -1;
    	}
    }
    

      

  • 相关阅读:
    day7 反射
    day7 面向对象进阶
    day7 面向对象class()学习
    day6 subprocess模块、logging模块
    day6 hashlib模块
    day6 ConfigParser模块 yaml模块
    day6 xml文件格式的处理
    day6 shelve模块
    day6 SYS模块
    Servlet的学习之Response响应对象(1)
  • 原文地址:https://www.cnblogs.com/acmwangpeng/p/5774046.html
Copyright © 2011-2022 走看看