
折半查找(仅有序顺序表)
有一个长度为n 的 int 型升序数组A[n]。请编写一个函数来查找数组中值为k的元素第一次出现的数组下标。如果没有找到,返回-1。函数原型为:int search(int A[], int n, int k)
例如: 若 A[ ] = {1,2,3,4,5,5,6},k=2,则函数返回 1;
若 A[ ] = {1,2,3,4,5,5,6},k=5,则函数返回 4;
若 A[ ] = {1,2,3,4,5,5,6},k=666,则函数返回-1;
int search(int A[], int n, int k){
int l=0,r=n-1;
int index=-1;
while(l<=r){
int mid=(l+r)/2;
if(A[mid]==k){ //查找成功
index=mid;
r=mid-1; //向左收缩 如果要找k最后一次出现的位置 l=mid+1 向右收缩
}else if(A[mid]<k)
l=mid+1;
else if(A[mid]>k)
r=mid-1;
}
return index;
}
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 AuraX
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果