lanfengc 发表于 2010-5-21 22:57:42

数组查找算法哪种最效率?

验证码识别需要用到数组查找方面的代码, 谁有兴趣了一起研究研究。
目前数组查找方法有四种。
1.顺序查找
在一个已知数组中找出与给定关键字相同的数的具体位置。原理是让关键字与数组中的数从第一个开始逐个比较,直到找出与给定关键字相同的数为止
2.二分查找
二分查找法二分查找又称折半查找,它是一种效率较高的查找方法。   
【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。   
【优缺点】折半查找法的优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。   
【算法思想】首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。   重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
3.插值查找
二分查找法的改进。查找码不是中间的元素了,变成了一个估算值。
该估算值等于(被查找的关键值-被查找的数组的下界元素)/(被查找数组的上界元素-被查找数组的下界元素)*(上界元素下标-下界元素下标)+下界元素下标 ,如果关键值等于数组下标为估算值的元素,则返回估算值,如果关键值大于数组下标为估算值的元素,下界数值=估算值+1,否则,上界=估算值-1.
直到数组查找结束。
4.动态查找
动态查找表的特点是:表结构本身是在查找过程中生成的,即对于给定值key,若表中存在其关键字等于key的记录,则查找成功返回,否则插入关键字等于key的记录。常见的是二叉树查找法。

zjimmy 发表于 2010-5-22 21:33:36

除了顺序查找 和 二分法,其他的看不懂。。。

lanfengc 发表于 2010-5-22 22:05:19

回复 2# zjimmy


    额, 其实插值和动态查找 都是二分查找的优化算法。

二分法每次以数组(子数组)中间的元素为分界线,将数组拆分,插值法是假设一个元素为数组的中间元素,该假设元素的下标是通过一个公式算出来的。公式是:假设元素下标=(被查找的关键值-被查找的数组的下界元素)/(被查找数组的上界元素-被查找数组的下界元素)*(上界元素下标-下界元素下标)+下界元素下标动态查找法最常用的是二叉树查找,对于一个给定的关键字K, 从二叉树的根节点开始查找,如果K大于根节点,则K的顺序一定在根节点的右侧,再从右侧的第一个叶子节点开始查找,大于在右,小于在左,直到找到一个位置,K大于左侧节点值,小于右侧节点值,则将K插入到该节点位置,原来的节点向右移动。
页: [1]
查看完整版本: 数组查找算法哪种最效率?