对有序表进行折半查找 有序表折半查找过程
对有序表进行折半查找
选择:B 依次是mid为10,4,1,最后一次与第1个位置上的数进行比较 查找不到说明不存在该关键字
二分查找是log级别的,对于20来讲,5次能查到任何数据
至少需要4次,第一次与第11个位置上的数进行比较 mid = (0 + 21)/2 = 10,不相等进入[0,9]区域进行查找 第二次与第5个位置上的数进行比较 mid = (0 + 9)/2 = 4,不相等进入[0,3]区域进行查找 第三次与第2个位置上的数进行比较 mid = (0 + 3)/2 = 1,不相等进入[0,0]区域进行查找 第四次与第1个位置上的数进行比较 查找不到说明不存在该关键字
有序表折半查找过程
很简单 我以前做的 可以直接运行的 //快速排序 class QuickSorter { private void swap(ref int l, ref int r) { int temp; temp = l; l = r; r = temp; } public void Sort(int[] list, int low, .
有序表的查找树类似于完全二叉树,第i层的结点比较i次,第五层的结点比较5次,因此此题看第五层几个结点,此题也就变成类此:30个结点的完全二叉树第五层有多少结点,30个结点的完全二叉树的深度就是5,前四层共2^4-1=15,因此第五层30-15=15个结点
使用二叉树,第3层有4个元素,二叉树的第n层有2的n-1次方个元素,那没查找长度为n是就有2的n-1次方个元素.(注:有序表总元素个数不超过2的n次方个元素)
顺序有序表二分查找
#include #include using namespace std; bool search(int *a,int length,int key) { for(int i=0; i>key) { cin>>length; int *a = new int[length]; for(int i=0; i>a[i]; } if(search(a,length,key)) cout
比较次数 3 2 3 4 1 3 4 2 3 4 就是用书上的二分算法,来算的.你试试,根我的正确答案核对一下
DEV C++下编译成功#include<stdio.h>#include<stdlib.h> static int a[1024],count=0; . else printf("\n查找到元素位置为%d,查找次数为%d.",mid,count); } else printf("\n.
对长度为12的有序表进行
画个二叉树,答案就出来了37=1*1+2*2+3*4+4*5 答案为37/12.--B
需要查找1次的排序为:第 6 需要查找2次的排 需要查找3次的排序为:第 1,4,7,10 需要查找4次的排序为:第 2,5,8,11,12 平均查找长度: (1*1+2*2+3*4+4*4)/12 = 37/12
长度为12的按关键字排序的查找表采用顺序组织结构,则在二分查找的方法下,在折半查找的asl可以画出查找二叉树来做:根节点是6,第二层是3、9,第三层
有序表顺序查找失败
至少需要4次,第一次与第11个位置上的数进行比较 mid = (0 + 21)/2 = 10,不相等进入[0,9]区域进行查找 第二次与第5个位置上的数进行比较 mid = (0 + 9)/2 = 4,不相等进入[0,3]区域进行查找 第三次与第2个位置上的数进行比较 mid = (0 + 3)/2 = 1,不相等进入[0,0]区域进行查找 第四次与第1个位置上的数进行比较 查找不到说明不存在该关键字
有序表可以用顺序查找的.
题目意思应该是无序的顺序表 平均查找长度为n+1(有序表并不是) 是因为在表中尾部(或头部)加入了一个辅助的符合查找条件的“哨兵”,然后从新表的另一头开始查找,此时新表长为n+1. “哨兵”的关键字是符合查找条件的,故在新表中一定会查找成功,查找成功时返回它在表中的位置.原表长度为n,下标范围为0到n-1,如果查找到返回的值为n(头部时为0),即原表中查找失败.此时与新表中的所有元素都比较过,故为n+1.加入“哨兵”的好处是不需要再考虑判断数组越界的问题,如果不加入“哨兵”,还需考虑数组下标越界问题,比较次数更多.
上一篇:便士兑美元 1美元等于多少便士