静态查找与动态查找定义?
静态查找定义了:。
静态搜索是我们通常概念中的搜索,它是一个"真实搜索"。
静态搜索之所以是真正的搜索,是因为在静态搜索的过程中,只有"搜索和搜索被执行,即:
(1)检查特定关键字是否在表中(判断搜索);
(2)检索特定关键字数据元素的各种属性(检索搜索)。
这两个操作只获取现有表中的数据信息,而不对表的数据元素和结构进行任何更改,这称为静态查找。
常见的静态查找(表):顺序查找、二分法查找、索引顺序查找(块查找)、斐波那契查找等。
动态搜索定义:
动态查找更像是一个"创建、扩展、修改和删除"一张桌子。
在动态查找的过程中,表上还会有两个操作:
(1)首先,有一个"判断性搜索和搜索。如果表中不存在某个特定的关键字,它会按照一定的规则插入到表中;
(2)如果已经存在,可以删除。
虽然动态查找的过程只是添加"插入"和"删除"操作,在特定的表上执行这两个操作通常不是那么简单。
常见的动态搜索:各种树(二叉查找树,AVL,B/B树,红黑树等。)和哈希表。
关于数据结构二分法查找成功的平均查找长度和失败的查找长度?
做这类题目的时候要画二叉树。然后补叶子。叶子的高度是搜索失败的次数。然后总和除以叶子数就是失败的平均搜索长度。非叶节点是成功的,高度就是搜索成功的次数,然后除以非叶节点的次数就是成功的平均长度。对于11个节点,二叉树的搜索成功长度为(1x2x3x4x4)/1133/11,搜索失败长度为(4x83x4)/(84)44/12。
最早的二分查找代码什么时候出来的?
推荐答案的代码有问题,不考虑要搜索的数字下标为0怎么办?因此,如果序列表中没有要检查的元素,则应该返回-1。
另外,主函数的最后两行调用了两次查找函数,所以代码不够简洁。
建议阅读:
#inclusiveltstdio.HGT#inclusiveltstdlib.HGTintsearch(int*a,intkey){//在序列表中找到key对半的数据元素。如果找到,函数值是intlow0,mid//这个元素的数组下标;否则为0。inthigh14while(lowlthigh){mid(lowhigh)/2if(keya[mid])returnmid//找到要搜索的元素elseif(keylta[mid])highmid-1//继续搜索elselowmid1//后半部分继续搜索}return-1//序列表中没有要搜索的元素}Voidmain(){int*a,key,iintb[15]{0}abprintf(请输入15个从小到大的整数:
)for(i1ilt15i){scanf(%d