二分查找(折半查找)
二分查找,近适用于有序的顺序表(所有元素存放在数组中)
算法思想
- 将key与中间元素的关键字比较
- 相等则放回元素位置
- 不等则向前(前半部分)或者向后(后半部分)查找
int binary_search(SeqList L,ElemType key){
int left = 0,right = SeqList.length -1;
int mid;
while(left <= right){
mid = (left + right)/2;
if(L.elem[mid] == key){
return mid;//查找成功,返回下标
}else if(key < L.elem[mid]){
right = mid - 1;
}else{
left = mid + 1;
}
}
return -1;//查找失败
}
判定树趋近于一棵平衡二叉树
平均查找长度ASL=log2(n+1)-1
时间复杂度O(log2(n))