二分查找及递归的二分查找

一、思路
二分查找又名折半查找,顾名思义是分成两部分,每查找一次数据减半,所以查找起来会很快。但是二分查找的条件是已经有序的数据。
1、设置两个变量i,j.为查找的范围,i一般为0,j一般为数组长度减一;
2、设置变量mid,mid为所查数组范围的中间位置,即mid=(i+j)/2;
3、比较所要查询的数据val与arr[mid];
4、如果val等于a[mid],找到数据,跳出循环
5、如果val小于arr[mid],将查找范围锁定在mid左边,即j=mid-1;
6、如果val大于arr[mid],将查找范围锁定在mid右边,即i=mid+1;
7、重复3 ;

//二分查找
private static int binarySearch(int[] arr, int first, int last, int val) {
//用插入排序将所给数据先进行排序
       insertSort(arr);
		while(first<=last){
	    int center=(first+last)/2;
	    //如果所兆数据在后半段
	    if(val>arr[center] ){
	    	first=center+1;
	    }
	    //如果所给数据在前半段
	     else if(val=0;--j){
			if(val

二、测试

public static void main(String[] args) {
          int[] arr = new int[]{54,5,7,83,34};
          int idx=binarySearch(arr, 0,arr.length-1,54);
          System.out.println(Arrays.toString(arr));
          System.out.println(idx);
    }

三、结果
在这里插入图片描述
四、代码的优化
将查找写成递归的形式,递归就是通过自己调用自己的方法使得程序更简单!
递归包括了两部分:
1、递归头
递归头的作用:什么时候不调用自身方法。如果没有头,将陷入死循环,也就是递归的结束条件。
2、递归体
递归体的作用:在什么情况下 方法会自己调用自己!
代码:

private static int binarySearch(int[] arr,int i,int j,int val){
		int mid=(i+j)/2;
		if(valarr[mid]){
		//递归调用mid+1到j的二分查找
			return binarySearch(arr,mid+1,j,val);
		}else{
		//递归头
			return mid;
		}
	}

你可能感兴趣的:(二分查找及递归的二分查找)