算法经典|二分查找详解
算法经典|二分查找详解
查询算法是非常重要的算法之一,即便不从事算法相关岗位,在CRUD的开发岗中,查询也是常见的业务操作。通常我们是从头到尾查询一个顺序表(数组、链表等)得到我们的结果,这种方式的时间复杂度为O(n),但针对一些特殊的数据,可以采取更加高效的方式查询。
二分查找
1.首先将预期结果与顺序表中间位置的元素或对象属性比较,若相等,则查找成功,返回结果;2.若不等,则所查结果只会在中间元素或对象之外的前半部分或者后半部分。3.然后在缩小的范围内继续进行上述两个步骤,知道找到或者确定表中没有对应结果位置。
int binarySearch(SeqList L,ElemType key){
//在有序表L中查找关键字为key的元素,若存在则返回其所在位置,否则返回-1
int low=0,high=L.length-1;
int mid;
while(low<=high){
mid=(low+high)/2;//取中间位置
if(L.index[mid]==key){
return mid;//查找成功则返回所在位置
}else if(L.index[mid]>key){
high = mid-1;//从前半部分继续找
}else{
low=mid+1;//从后半部分继续找
}
}
return -1;
}
关于mid的确定
复杂度分析
适用条件
►
►
►
长按二维码