查找算法

/**
 * 查找算法
 * 
 * @author bruce
 *
 */
public class Search {
	
	
	
	/**
	 * 二分查找(非递归,升序)
	 * @param arr
	 * @param v
	 * @return
	 */
	public int find(int[] arr,int v){
		int begin=0,end=arr.length-1;
		while(begin<=end){
			int m=(begin+end)>>>1;
			int mValue=arr[m];
			if(mValue>v){
				end=m-1;
			}else if(mValue<v){
				begin=m+1;
			}else{
				return m;
			}
		}
		return -1;
	}
	
	
	/**
	 * 二分查找(递归,升序)
	 * @param arr
	 * @param begin
	 * @param end
	 * @param v
	 * @return
	 */
	public int search(int arr[],int begin,int end,int v){
		System.out.println("begin:"+begin+" end:"+end);
		if(begin<=end){
			int m=(begin+end)>>>1;
			int mValue=arr[m];
			if(mValue>v){
				return search(arr,begin,m-1,v);
			}else if(mValue<v){
				return search(arr,m+1,end,v);
			}else{
				return m;
			}
		}
		return -1;
	}

	
	public static void main(String[] args){
		Search search=new Search();
		int[] arr={1,2,3,4,5,6,7,8,9,10};
		int index=search.search(arr,0,arr.length-1, 4);
		System.out.println(index);
	}
}

 

你可能感兴趣的:(算法)