java实现 二分查找 非递归与递归2种方式

非递归,利用循环

package file;

import java.util.Scanner;

public class Main {
	public static void search(int[] a,int key){
		int low=0;
		int high=a.length-1;
		int mid;
		while(low<=high){
			mid=(low+high)/2;
			if(a[mid]==key){
				System.out.println(mid);
				return;
			}
			else if(a[mid]>key){
				high=mid-1;
			}
			else{
				low=mid+1;
			}			
		}
		return;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in=new Scanner(System.in);
		System.out.println("输入数组长度:");	
		int len=in.nextInt();
		System.out.println("输入数组:");
		int[] a=new int[len];
		for(int i=0;i<len;i++){
			a[i]=in.nextInt();
		}
		System.out.println("输入key:");
		int key=in.nextInt();
		search(a,key);
	}

}

递归方法

package file;

import java.util.Scanner;

public class Main {

	public static int search(int[] a,int key,int start,int end){
		if(start>end)
			return -1;
		int mid=(start+end)/2;
		if(a[mid]==key){
			System.out.println(mid);
			return mid;
		}
		else if(a[mid]>key){
			return search(a,key,start,mid-1);
		}
		else{
			return search(a,key,mid+1,end);
		}			
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in=new Scanner(System.in);
		System.out.println("输入数组长度:");	
		int len=in.nextInt();
		System.out.println("输入数组:");
		int[] a=new int[len];
		for(int i=0;i<len;i++){
			a[i]=in.nextInt();
		}
		System.out.println("输入key:");
		int key=in.nextInt();
		System.out.println(search(a,key,0,len-1));
	}

}



全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 18:54
点赞 评论 收藏
分享
Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
11-14 16:13
已编辑
重庆科技大学 测试工程师
Amazarashi66:不进帖子我都知道🐮❤️网什么含金量
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务