二分查找

6 篇文章 0 订阅
3 篇文章 0 订阅

查找算法——二分查找


步骤

先排序,再折半查找

java代码实现

非递归实现二分查找

	public static void main(String[] args) {
		int[] a = {4,8,1,2,10,5,7,9,3,6};
		System.out.println(Arrays.toString(a));
		//如果找到的话,返回查找到的位序
		//如果没有找到,返回-(插入点位序)-1
		System.out.println("请输入需要查找的元素:");
		Scanner scanner = new Scanner(System.in);
		int x = scanner.nextInt();
		scanner.close();
		System.out.println(binarySearch(a,x));
	}

	private static int binarySearch(int[] a,int x) {
		//先从小到大排序
		Arrays.sort(a);
		System.out.println(Arrays.toString(a));
		int l = 0;
		int r = a.length-1;
		while(r-l>=0) {
			int m = (l+r)>>>1;
			if(a[m]==x) {
				return (l+r)/2;
			}
			else if(a[m]<x){
				l = m + 1;
			}
			else {
				r = m - 1;
			}
		}
		return -1;
	}

递归实现二分查找

	public static void main(String[] args) {
		int[] a = { 4, 8, 1, 2, 10, 5, 7, 9, 3, 6 };
		System.out.println(Arrays.toString(a));
		// 如果找到的话,返回查找到的位序
		// 如果没有找到,返回-(插入点位序)-1
		Arrays.sort(a);
		System.out.println(Arrays.toString(a));
		System.out.println("请输入需要查找的元素:");
		Scanner scanner = new Scanner(System.in);
		int x = scanner.nextInt();
		scanner.close();
		System.out.println(binarySearch(a, x, 0, a.length - 1));
	}

	// 递归实现
	private static int binarySearch(int[] a, int x, int l, int r) {
		if (l == r)
			if (x == a[l])
				return l;
			else
				return -1;
		else {
			int m = (l + r) >>> 1;
			if (x == a[m])
				return m;
			else if (x > a[m])
				return binarySearch(a, x, m + 1, r);
			else
				return binarySearch(a, x, l, m - 1);
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值