1.先画出满足有序表长度的最大满二叉树,然后将剩下的结点个数一个个插入该树;2.从上往下看,比较每个结点的左右子树结点个数,如果左右子树结点个数相同优先放右边,左边比右边少就放左边,直到往下塞到二叉树底部成为叶子结点。对于步骤1和2的具体做法,见下列实例分析:长度为12的有序表画出折...
mid的位置就是(起点下标+ 终点下标)/2下取整 比如low = 1, high = 10, 因此mid = (1+10)/2 = 5 按照比较的次数生成判定树,比较1次的是根结点,比较2次的在第二层,比较3次的在第三层,...一次类推,也可以说是每次的mid即形成判定树的结点,左子树上的结点是有序表前半部分的所有结...
⑵ 考虑判定树的左子树,即将查找区间调整到左半区,此时的查找区间是[1,4],也就是说,左分支上为根结点的值减1,代表查找区间的高端high,此时,根结点的左孩子是(1+4)/2=2,如图(b)所示;⑶ 考虑判定树的右子树,即将查找区间调整到右半区,此时的查找区间是[6,10],也就是说,右分支...
第一层:0~11。11/2 = 5; 第二层:0~4。4/2 = 2; 6~10。(6+10)/2 = 8; 第三层:0~1。1/2 = 0; 3~4。(3+4)/2 = 3; 6~7。(6+7)/2 = 6; 9~10。(9+10)/2 = 9; 第四层:每个区域都只剩下一个了,根据大小放在左右。小的在左,大的在右。 ASL(成功):(1*1+2*2+4*3...
//折半查找法 /* * 从表列中查一个数最简单的方法是从第1个数开始顺序查找,将要找的数与表列中的 数一一比较,直到找到为止(如果表列中无此数,则应找到最后一个数,然后判定“找不到”) 但这种“顺序查找法”效率较低。如果表列中有1000个数,且要找的数恰恰是第1000个数, ...
对于步骤1和2的具体做法,见下列实例分析:长度为12的有序表画出折半查找判定树;12>2^3,即最大能画出3层的满二叉树,接着将剩余5个结点插入该树;先插入h,a的左右子树结点个数都为3,则到c,c的左右子树结点个数都为1,接着到g,g的左右子树都为0,最后h到了g的右边;先插入i,a的...
折半查找算法又叫二分查找算法,当你想在一组有序数组中想要查询一个数字,一般的方法,数组中有多少个数字,系统就要找多少次,很不快捷,而用二分法查找的话,2^n个数字只需要查找最多n次就可以了,具体操作如下: #include<stdio.h> int main() { int arr[] = {1,2,3,4,5,6,7,8,9,10}; ...