二分查找
2014-06-04 18:01
169 查看
二分查找又称折半查找
假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;
否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前
一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在
为止,此时查找不成功。
优点是比较次数少,查找速度快,平均性能好;
缺点是要求待查表为有序表,且插入删除困难。
int BinSearch( int arr
, int key)
{
int high,low,mid;
high=n-1;
low =0;
mid = n-1/2;
if(key ==arr[high])
return arr[high];
if(key ==arr[low])
return arr[low];
while(high>=low){
if(arr[mid]>key){
low=mid;
//mid= (high+low)/2;可能会溢出
mid=(high-low)/2 +low
}else if( arr[mid]<key){
high=mid;
mid = (high-low)/2;
}else{
return arr[mid];
}
return -1;
}
假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;
否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前
一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在
为止,此时查找不成功。
优点是比较次数少,查找速度快,平均性能好;
缺点是要求待查表为有序表,且插入删除困难。
int BinSearch( int arr
, int key)
{
int high,low,mid;
high=n-1;
low =0;
mid = n-1/2;
if(key ==arr[high])
return arr[high];
if(key ==arr[low])
return arr[low];
while(high>=low){
if(arr[mid]>key){
low=mid;
//mid= (high+low)/2;可能会溢出
mid=(high-low)/2 +low
}else if( arr[mid]<key){
high=mid;
mid = (high-low)/2;
}else{
return arr[mid];
}
return -1;
}
相关文章推荐
- Java数据结构与算法之【二分查找】
- 关于二分查找
- java中的二分查找
- 二分查找
- JavaScript图形化展示二分查找
- 漫谈递归:二分查找算法的递归实现
- Google面试题 之 二分逼近&二分查找 数组中第K小的数字
- 【二分查找】之无聊BUG
- 51NOD 1467 旋转绳 二分查找 模拟
- 折半查找(二分查找)——简单说明
- 4-10 二分查找 (20分)
- ZJU2029 The Intervals - 二分查找
- 你真的会二分查找吗?
- 考试题 树状数组查找以比x大的数作为中位数的个数+二分中位数
- c# 二分查找
- 二分查找,二叉查找树(二叉排序树)的基本思想以及算法实现
- HDU 2199 Can you solve this equation(二分查找)
- 《编程珠玑》第二章2.1 二分查找不存在的数
- 二分查找
- Binary_search 二分查找