二分查找算法

原创 2015年07月08日 15:02:18
public class BinarySearch {

	public static int binarySearch(int[] a, int start, int end, int des) {

		while (start <= end) {
			int middle = (start + end) / 2;
			if (des == a[middle]) {
				return middle;
			} else if (des < a[middle]) {
				end = middle - 1;//待查找的值小于中间值则在中间值左边查找,将右边界的end置中间值下角标的前一位
			} else {
				start = middle + 1;//待查找的值大于中间值则在中间值的右边查找,将左边界的start置中间值下角标的后一位
			}
		}
		return -1;//没有则返回-1
	}
  //测试
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int[] a = { 1, 3, 6, 7, 8, 10 };
		System.out.println(binarySearch(a, 0, 5, 8));
	}


时间复杂复杂度计算:二分查找的基本思想是将n个元素分成大致相等的两部分,去a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x.


时间复杂度无非就是while循环的次数!


总共有n个元素,


渐渐跟下去就是n,n/2,n/4,....n/2^k,其中k就是循环的次数


由于你n/2^k取整后>=1


即令n/2^k=1


可得k=log2n,(是以2为底,n的对数)


所以时间复杂度可以表示O()=O(logn)

相关文章推荐

二分查找算法

  • 2015年02月02日 11:51
  • 334B
  • 下载

二分查找算法

  • 2014年04月15日 05:21
  • 1KB
  • 下载

二分查找算法递归和非递归实现

自己接触和了解过的查找算法总结起来分为3个吧: 1. 静态查找(主要是二分查找,效率较高) 2. 动态查找(二叉查找树) 3. 哈希表 首先来说二分查找吧! 基本思想: 时间复杂度: 空间复杂度: 代...

二分查找算法

  • 2008年05月06日 21:24
  • 120KB
  • 下载

一种改进的二分查找算法

  • 2015年12月13日 22:01
  • 219KB
  • 下载

Python实现二分查找算法

二分查找二分查找又叫折半查找,二分查找应该属于减治技术的成功应用。所谓减治法,就是将原问题分解成若干个子问题后,利用了规模为n的原问题的解与较小规模(通常是n/2)的子问题的解之间的关系。 二分查找...

二分查找算法

  • 2014年04月28日 15:39
  • 4.43MB
  • 下载

winform 二分查找算法源码

  • 2009年11月26日 11:46
  • 16KB
  • 下载

剑指Offer——二分查找算法

剑指Offer——二分查找算法前言     本片博文主要讲解查找算法的相关知识。重点介绍二分查找。     二分查找算法是在有序数组中用到的较为频繁的一种算法,在未接触二分查找算法时,最通用的一种做法...

二分查找算法

  • 2014年01月04日 01:27
  • 1KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二分查找算法
举报原因:
原因补充:

(最多只允许输入30个字)