第三天算法相关--二分法1.0

二分法就是一种在有序数组中查找到目标元素T的一种搜索算法。
搜索过程从数组中间元素开始:
一、大概思路
1、如果中间元素正好是查找的元素,这可以输出该元素序号,并结束;
2、如果目标元素T大于中间元素,则将在中间与最大的之间进行寻找,然后中间元素为最小,如果目标元素T小于中间元素就从最小与中间进行寻找,然后中间的数为最大
3、注意还要认识到数组可能为空
二、复杂度:
最坏的时间复杂度是O(logn);
最好的时间复杂的是O(1);
平均复杂度是:O(logn);
空间复杂度O(1);
三、算法步骤:
给定一个数组A,目标元素:T,查找T在A中的位置
1、令L为0,R为n-1.
2、如果L>R,则搜索结束
3、令m(中间值)为“(L+R)/2
4、如果Am<T,令L为m+1并回到步骤二,并继续
5、如果Am<T,令R为m-1并回到步骤二,然后继续
6、当Am=T,搜索结束,返回m的位置
四、与二分法相关的题:
1、查找第一个/最后与target相等的元素
2、数组的旋转(7,8,9,1,3,4)
3、查找最后一个小于target/第一个大于target的元素

//二分法查找
package the_experiment_of_seven;

public class DichotomySearch {
    
    
	//设计一个类,用来返回目标元素的地址
	public static int intSearch(int[] arr,int key) {
    
    
		int L=0;
		int R=arr.length-1;
		int mid=0;
		for(int i=0;L<=R;i++) {
    
    
			mid=(L+R)/2;
			if(arr[mid]<key) {
    
    
				L=mid+1;
			}
			if(arr[mid]>key) {
    
    
				R=mid-1;
			}
			if(key==arr[mid])
            {
    
    
                return mid;
            }
		}
		return -1;
	}
	public static void main(String[] args) {
    
    
		int[] arr= {
    
    1,2,3,4,5,6,7,8,9};
		System.out.println(intSearch(arr,5));
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_43525516/article/details/104189666