版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xnh_565175944/article/details/82634691
二分搜索查找是分治算法的典型例子
给定已经排好序的n个元素存在数组a中, 现要在这n个元素中找出特定元素x
- 一般方法是顺序查找,逐个比较数组a中每个元素,直到找到元素x位置。这种方式需要O(n)次的比较。
- 二分搜索的方法是利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(logn)时间完成搜索任务。(使用条件是排序好的数组)
代码:
int binarySearch(int a[],int x,int n)
{
int left = 0; //左值
int right = n-1; //右值
while(left <= right) //终止条件
{
//一般是int middle = (left + right)/2; 但是数据过大的话,数据会溢出。而通常用二分查找就是因为查找的数据量太大。
int middle = left+(right-left)/2; //所以这种方式是完美二分搜索
if(x == a[middle])
return middle;
if(x>a[middle])
left = middle+1;
else
right = middle-1;
}
return -1;
}