二分查找
2015-09-13 15:02
375 查看
二分查找是在有序表中查找某一数据用的比较频繁的算法。时间复杂度是O(logn)。
譬如在数组{1,2,3,4,5,6,7,8,9}中查找元素6,则使用二分查找算法的话,执行顺序为:
1 第一步查找中间元素,即是5,将6与5进行比较,得出5<6,则6必然在5之后的那一部分,那么就在这一部分开始寻找;
2 第二步查找{6,7,8,9}的中间元素,即是7,将6与7比较,得出7>6;则6必然在7左边的部分,则在这部分寻找;
3 第三步在{6}中寻找,一下就找到了。
代码如下,返回的是查到的元素在原数组中的位置。找不到返回-1。
int B_find(int a[],int length,int k)
{
if(k>=length)
return -1;
int low=0;
int high=length-1;
while(low<=high)
{
int mid=(low+high)/2;
if(a[mid]==k)
return mid;
else if(a[mid]>k)
high=mid-1;
else if(a[mid<k])
low=mid+1;
}
return -1;
}
譬如在数组{1,2,3,4,5,6,7,8,9}中查找元素6,则使用二分查找算法的话,执行顺序为:
1 第一步查找中间元素,即是5,将6与5进行比较,得出5<6,则6必然在5之后的那一部分,那么就在这一部分开始寻找;
2 第二步查找{6,7,8,9}的中间元素,即是7,将6与7比较,得出7>6;则6必然在7左边的部分,则在这部分寻找;
3 第三步在{6}中寻找,一下就找到了。
代码如下,返回的是查到的元素在原数组中的位置。找不到返回-1。
int B_find(int a[],int length,int k)
{
if(k>=length)
return -1;
int low=0;
int high=length-1;
while(low<=high)
{
int mid=(low+high)/2;
if(a[mid]==k)
return mid;
else if(a[mid]>k)
high=mid-1;
else if(a[mid<k])
low=mid+1;
}
return -1;
}
相关文章推荐
- Spring MVC MultiActionController annotation example
- c++学习笔记之声明和定义的关系
- Exchange 2010的一例发信失败解决方法
- 小猫统计——自定义数据编辑界面
- HightChart的数据列(Series)
- CSS BFC
- js中的this,call及apply
- 王家林老师书籍和视频集合
- 秒表显示
- GBDT(Gradient Boost Decision Tree)
- HDU 5437 Alisha’s Party 优先队列
- POJ-1580(一直WA,没有找到原因)
- 简述Java集合框架
- The Android ION memory allocator, DMABUF is mentioned as well
- 单据编号大漏洞
- 使用HttpClient4提交包含上传文件的表单
- hdu 4915 Parenthese sequence--2014 Multi-University Training Contest 5
- web.xml中servlet的配置
- office2013使用技巧——去掉页眉
- UIDevice 类