分治法(1)——二分搜索算法

算法思想:
将n个元素分成个数大致相同的两半,取 a[n/2] 与 x 进行比较。如果 x = a[n/2],则找到 x ,算法终止。如果 x < a[n/2],则只要在数组的 a 的左半部分继续搜索 x 。如果 x > a[n/2],则只要在数组的 a 的右半部分继续搜索 x 。

具体算法:

public static int binarySearch(int[] a,int x) {
	 int n = a.length;
	 int left = 0;
	 int rigth = n - 1;
	 while(left < right)
	 {
		 int middle = (left + right) / 2;
		 if(a[middle] == x)
		 {
			 return middle;
		 }
		 if(a[middle] > x)
		 {
			 right = middle - 1;
		 }
		 else(a[middle] < x)
		 {
			 left = middle + 1;
		 }
	 }
	 return -1;
}

时间复杂度分析:

T(n)= T(n/2)+O(1)

由于a=1, b=2, k=0,a=𝒃^𝐤, 则:

T(n)= O(log n)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值