二分法查找顺序查找和二分查找

二分法查找  时间:2021-08-04  阅读:()

汇编二分法查找

这是32模式程序,ebx接收数组地址,ecx接收数组长度,eax存放要查找的数

如果找到返回下标(从0开始计算),找不到就返回ffffffffh(-1)

;------------------------------------------------------------------

binarySearch PROC ;Receives:EBX=OFFSET array, ECX=LENGTHOF array, EAX=searchVal ;Returns:EAX=index, eax=ffffffffh means not found ;------------------------------------------------------------------- dec ecx mov esi, 0 mov edi, 0 add edi, ecx bs_L2: mov edx, esi add edx, edi shr edx, 1 cmp eax, [ebx+edx*4] je bs_found ja bs_greater dec ecx mov edi, edx jmp bs_isFinish bs_greater: inc edx mov esi, edx bs_isFinish: cmp esi, edi jl bs_L2 mov eax, -1 jmp bs_quit bs_found: mov eax, edx bs_quit: ret binarySearch ENDP

c语言中如何在链表内使用二分法查找

对于无序的链表,还是沿着头结点顺序查找比较好。

如果要用二分法查找,则先将该链表进行排序,以下是我用冒泡法对单链表进行的排序: /*单链表排序(mark=1,降序;mark=0,升序)*/ void SortList(LNode *L,int mark) { int i,j,change=TRUE; ElemType temp; LNode *p=L->next,*q; if(p && (p->next)) //如果单链表长度<2,则不用排序 { for(j=1;j<L->data && change;j++) { change=FALSE; p=L->next; q=p->next; for(i=0;i<L->data-j;i++) { if((q->data>p->data && mark) || (q->data<p->data && (!mark))) { temp=p->data; p->data=q->data; q->data=temp; change=TRUE; } p=q; q=q->next; } } } printf("排序成功 "); } /*从链表的第curI个点处开始查找第i个结点,前提:i>curI*/ LNode *GetElem2(LNode *L,int curI,int i) { LNode *p=L; while(p=p->next) if(i==(++curI)) { return p; } return NULL; } /*对排序后的链表进行二分法查找*/ int DichotomyList(LNode *L,ElemType e) { LNode *p=L; int cur=0;//cur用来保存当前的位置结点,避免每次定位结点都从头结点开始 int left=1,right=L->data;//我定义的链表,其头结点的数据域保存着链表的长度 int mid=(left+right)/2; //SortList(L,0); while(left<=right && (p=GetElem2(p,cur,mid))->data!=e) { if(p->data>e) {cur=0;p=L;right=mid-1;mid=(left+right)/2;} else {cur=mid;left=mid+1;mid=(left+right)/2;} } if(p->data==e) {printf("find node in %d. ",mid);return mid;} else {printf("find none. ");return 0;} } 经VC上测度通过 如果你要完整的程序的话,留个邮箱,我发给你

C语言 二分法查找次数公式怎么推导?

对具有n个元素的有序数组进行二分法查找,要分析的比较次数,可以使用画二叉判定树的方法来分析。

该二叉判定树的高度为[log2(n)]+1层,此即为二分查找的最多比较次数,比如:n=1000,则最多比较[log2(1000)]+1=9+1=10次。

? ? 如果要计算平均的比较次数,则需要对二叉判定树中的每个节点进行分析,处于第一层的比较1次,第二层的比较2次,第三层比较3次,依次类推……把各个节点的比较次数累加,再处于节点数(元素个数)即为平均比较次数,这里假设查找是在等概率的情况下进行的。

? ? 举个例子:有9个元素的有序数组,对每个元素按1,2,3...8,9进行编号,则其二叉判定树如下: 图中可以看出,如果要找的元素处在第5个位置,则只要1次比较即可找到,若找第9个元素,则需要4次比较,算法分别比较了第5,7,8,9等4个元素。

所以,平均的比较次数大概如下: 这样分析,能看懂吗?希望能帮到你!

数据结构中,二分法查找30,怎么查找?如:7,9,14,15,17,23,30,31,45,66。请给出详细的方法!谢谢!

#include <stdio.h> int BinSearch(int a[],int k) { int l=1,h=10; //h为数组长度 while(l<=h) { int i=0; i=(l+h)/2; //找到中间位置 if(a[i]==k) { return i; } else if(a[i]>k) //在左子表查找 { h=i-1; } else{ //在右子表查找 l=i+1; } } return -1; //没找到 } int main() { int t=0; int A[10]={7,9,14,15,17,23,34,31,45,66}; t=BinSearch(A,30); printf("A[%d]=30 ",t); return 0; }

顺序查找和二分查找

答案是A。

应用顺序查找法时,查找1需要比较1次;应用二分查找法时,查找1需要比较3次,总次数为4次。

其他元素的总查找次数均超过4次。

Digital-VM80美元新加坡和日本独立服务器

Digital-VM商家的暑期活动促销,这个商家提供有多个数据中心独立服务器、VPS主机产品。最低配置月付80美元,支持带宽、流量和IP的自定义配置。Digital-VM,是2019年新成立的商家,主要从事日本东京、新加坡、美国洛杉矶、荷兰阿姆斯特丹、西班牙马德里、挪威奥斯陆、丹麦哥本哈根数据中心的KVM架构VPS产品销售,分为大硬盘型(1Gbps带宽端口、分配较大的硬盘)和大带宽型(10Gbps...

提速啦:美国多IP站群云服务器 8核8G 10M带宽 7IP 88元/月

提速啦(www.tisula.com)是赣州王成璟网络科技有限公司旗下云服务器品牌,目前拥有在籍员工40人左右,社保在籍员工30人+,是正规的国内拥有IDC ICP ISP CDN 云牌照资质商家,2018-2021年连续4年获得CTG机房顶级金牌代理商荣誉 2021年赣州市于都县创业大赛三等奖,2020年于都电子商务示范企业,2021年于都县电子商务融合推广大使。资源优势介绍:Ceranetwo...

Hostodo商家提供两年大流量美国VPS主机 可选拉斯维加斯和迈阿密

Hostodo商家算是一个比较小众且运营比较久的服务商,而且还是率先硬盘更换成NVMe阵列的,目前有提供拉斯维加斯和迈阿密两个机房。看到商家这两年的促销套餐方案变化还是比较大的,每个月一般有这么两次的促销方案推送,可见商家也在想着提高一些客户量。毕竟即便再老的服务商,你不走出来让大家知道,迟早会落寞。目前,Hostodo有提供两款大流量的VPS主机促销,机房可选拉斯维加斯和迈阿密两个数据中心,且都...

二分法查找为你推荐
免费erp免费ERP靠谱吗?sap是什么SAP是什么东西boltzmann波尔兹曼常数的值是多少战棋类最好玩的战棋类网页游戏是什么 要可以自己控制的rs485协议“485通信协议”是什么?qsv视频格式转换器手机qsv怎么转换成mp4格式转换器第五人格抄袭那个模仿第五人格的游戏叫什么wifi快速破解器电脑版电脑怎么破解wifi密码网页错误详细信息打开网页,出现网页错误详细信息 求解决,谢了!眼镜片品牌哪个牌子的眼镜片好一些
什么是二级域名 香港ufo bluevm 香港服务器99idc 便宜域名 青果网 免费个人网站申请 免费网站申请 卡巴斯基试用版 php空间购买 稳定空间 杭州电信宽带 免费赚q币 百度新闻源申请 德国代理ip 内存 广州服务器数据恢复 万网主机代理 电脑主机报警 灵动鬼影实录3 更多