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

二分法查找  时间: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次。

盘点618年中大促中这款云服务器/VPS主机相对值得选择

昨天有在"盘点2021年主流云服务器商家618年中大促活动"文章中整理到当前年中大促618活动期间的一些国内国外的云服务商的促销活动,相对来说每年年中和年末的活动力度还是蛮大的,唯独就是活动太过于密集,而且商家比较多,导致我们很多新人不懂如何选择,当然对于我们这些老油条还是会选择的,估计没有比我们更聪明的进行薅爆款新人活动。有网友提到,是否可以整理一篇当前的这些活动商家中的促销产品。哪些商家哪款产...

欧路云(22元) 新增美国Cera线路VPS主机且可全场8折

欧路云(oulucloud) 商家在前面的文章中也有陆续介绍过几次,这不今天有看到商家新增加美国Cera线路的VPS主机,而且有提供全场八折优惠。按照最低套餐最低配置的折扣,月付VPS主机低至22元,还是比较便宜的。不过我们需要注意的是,欧路云是一家2021年新成立的国人主机商,据说是由深圳和香港的几名大佬创建。如果我们有介意新商家的话,选择的时候谨慎且月付即可,注意数据备份。商家目前主营高防VP...

麻花云:3折优惠,香港CN2安徽麻花云香港安徽移动BGP云服务器(大带宽)

麻花云在7月特意为主机测评用户群定制了促销活动:香港宽频CN2云服务器、安徽移动云服务器(BGP网络,非单线,效果更好)、安徽移动独立服务器、安徽电信独立服务器,全部不限制流量,自带一个IPv4,默认5Gbps的DDoS防御。活动链接:https://www.mhyun.net/act/zjcp特价云服务器不限流量,自带一个IPv4,5Gbps防御香港宽频CN2全固态Ⅲ型 4核4G【KVM】内存:...

二分法查找为你推荐
waspWASP的早期WASPgetsockoptsocket的send()方法的发送目的地址放在哪个参数里面?apple以旧换新苹果以旧换新怎么换?价格是怎样的横幅广告通栏广告 横幅广告是什么意思rs485协议“485通信协议”是什么?qsv视频格式转换器手机qsv怎么转换成mp4格式转换器qsv视频格式转换器有没有手机上用的(把qsv视频格式转换成mp4的转换器)团购网源码我想弄个自己的团购网站,请求帮助团购网源码最近看到团购挺火的,我也想做一个,请大家推荐个稳定的团购网站源码?软件群发有谁用过微信能群发的软件吗?在哪买的?
全能虚拟主机 重庆vps租用 域名解析服务器 老左博客 mobaxterm 12u机柜尺寸 京东云擎 国内php空间 dd444 数字域名 129邮箱 佛山高防服务器 百度云1t 昆明蜗牛家 卡巴斯基免费试用版 申请免费空间和域名 腾讯总部在哪 服务器是干什么用的 登陆空间 智能dns解析 更多