查找
查找的定义就是在存储着若干个元素的数据结构中找出关键字为k的元素的过程。如果在查找的过程中同时对表进行修改,那么称这个表为动态查找表,否则为静态查找表。
pi为查找表中第i个元素的概率,ci查找到表中第i个元素需要进行的关键字比较的次数,定义ASL=Σ(pi*ci)为查找成功的平均查找长度,同样地自然有查找失败的平均查找长度。
查找算法的ASL值越大,时间性能越差,反之,时间性能越好。
线性表查找
顾名思义就是在线性表中进行查找。
顺序查找
这个代码就不演示了,顺序查找就是将所有的元素全部遍历一遍直到遍历到与被查找值相等的元素结束,这也是最简单的查找。
对于第1个元素,从头到尾查找1次即可,对于第2个元素,从头到尾查找2次即可·······对于第x个元素,从头到尾查找x次即可,即ci=i。于是ASL=1/n*(1+2·····+n)=(1+n)/2。
若查找值不在表中,需要比较n次才能判断出查找失败,于是ASL(失败)=n。
折半查找
就是二分查找,有关二分查找的概念和众多变式看这篇文章,这里提供最基础的代码不多赘述。
int Binary_Search(int*a,int target,int l,int r){
//l和r分别表示每次折半查找的查找区间的左右端点
while (l<r){
int mid=l+(r-l)/2;//找中点
if (a[min