顺序查找法的平均查找长度(ASL)
假设列表长度为n,若查找从最后一个元素开始找起:
• 查找第1个元素,需进行n次比较;
• 查找第2个元素,需进行n-1次比较;
• …………
• 查找第n个元素,需进行1次比较
又假设查找每个数据元素的概率相等,即Pi=1/n
• 则顺序查找算法的平均查找长度为:
ASL=1*1/n+2*1/n+…+n*1/n
=(1+2+…+n)*1/n
=(n+1)/2
折半查找法(二分查找法)
基本思想:
将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
折半查找算法
int BinSrch (int a[ ], int n, KeyType k)
/*在表长为n的有序表 a[]中折半查找其关键字等于 k 的元素,
若找到,则函数值为该元素在表中的位置*/
{ low=1 ; high=L.length; /*置区间初值*/
while ( low<=high)
{ mid=(low+high) / 2;
if (k==a[mid])
return(mid); /*找到待查元素*/
else if (k<a[mid])
high=mid-1; /*继续在前半区间进行查找*/
else
low=mid+1; /*继续在后半区间进行查找*/
}
return (0);
}
浙公网安备 33010602011771号