算法分析与设计实践-作业3-2-二分查找

二分查找

1.问题

在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0.

2.解析

将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

3.设计

l=1,r=n;//l,r为数组边界
while(l<r){
    
    
	int mid=(l+r)/2;
	if(T[mid]<x){
    
    
		l=mid+1;
	}
	else{
    
    
		r=mid;
	}
}

4.分析

时间复杂度:O(logn)

5.源代码

https://github.com/lu-225/As-before/blob/master/2018212212124%20%E9%99%86%E5%AE%B6%E8%BE%89%20%E5%AE%9E%E9%AA%8C3-2/%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.cpp

猜你喜欢

转载自blog.csdn.net/qq_43633353/article/details/104911220