目录
概念
由顺序表表示的有序表可使用二分查找法来提高查找速度,而单链表由于无法直接访问中间元素,无法高效使用二分查找法。
有n个数存放在一维数组A[1..n]中,在进行顺序查找时,这n个数的排列有序或无序其平均查找长度相同,均为(n+1)/2
若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度ASL为(n+1)/2。
当在一个有序的顺序存储表上查找一个数据时,即可用折半查找,也可用顺序查找,但前者比后者的查找速度在大部分情况下要快。
顺序查找法适合于存储结构为顺序存储或链式存储的线性表。
适用于折半查找的表的存储方式及元素排列要求为顺序方式存储,元素有序。
用二分查找从100个有序整数中查找某数,最坏情况下需要比较的次数是:log2(100)=7
对有18个元素的有序表用二分法查找,则查找第3个元素的比较序列位置值为9,4,2,3。
(NeuDS_C++)有一个有序表为{1,3,9,12,32,41,45,62,75,77,82,95,100},当二分查找值82为的结点时,4次比较后查找成功。
对22个记录的有序表作折半查找,当查找失败时,至少需要比较4次关键字。(公式:log2(n+1),log2(23)≈4.528)
已知一个长度为100的顺序表L,其元素按关键字有序排列。若采用二分查找法查找一个L中不存在的元素,则关键字的比较次数最多是7次。(通过归纳证明,区间长度为 2^(k−1)∼2^k−1时,最多比较 k次)
代码
重点考察二分查找,顺序查找