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

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

易探云香港vps主机价格多少钱?香港云服务器主机租用价格

易探云香港vps主机价格多少钱?香港vps主机租用费用大体上是由配置决定的,我们选择香港vps主机租用最大的优势是免备案vps。但是,每家服务商的机房、配置、定价也不同。我们以最基础配置为标准,综合比对各大香港vps主机供应商的价格,即可选到高性能、价格适中的香港vps主机。通常1核CPU、1G内存、2Mbps独享带宽,价格在30元-120元/月。不过,易探云香港vps主机推出四个机房的优惠活动,...

酷番云78元台湾精品CN2 2核 1G 60G SSD硬盘

酷番云怎么样?酷番云就不讲太多了,介绍过很多次,老牌商家完事,最近有不少小伙伴,一直问我台湾VPS,比较难找好的商家,台湾VPS本来就比较少,也介绍了不少商家,线路都不是很好,有些需求支持Windows是比较少的,这里我们就给大家测评下 酷番云的台湾VPS,支持多个版本Linux和Windows操作系统,提供了CN2线路,并且还是原生IP,更惊喜的是提供的是无限流量。有需求的可以试试。可以看到回程...

腾讯云新用户省钱秘笈购买云服务器

目前国内云计算市场竞争异常激烈,尤其是国内的腾讯云、阿里云、景安等商家促销活动一波接一波的进行,对于有需要的用户确实得到不小的实惠。但是这样给予国内的主机商确实是比较大的打击,毕竟这些商家的背景和实例强劲,即便是贴本补贴优惠,也是不怕的。前两年阿里一家各种活动促销,确实在国内市场占据主要的市场地位,腾讯云开始两年没有较大的吸引用户,不过这两年的发展还是比较稳健的。我们很多网友在之前肯定也享受到一些...

二分法查找为你推荐
微指数新浪微博微指数主要包括哪些内容?链接转换怎么将一个普通链接转换成JS链接?安卓模拟器哪个好用安卓模拟器哪个最好电子听诊器怎样选择听诊器wizardryHogwarts for pikeys是什么意思???实数的定义数学中的“实数”是什么?qsv视频格式转换器QSV格式的视频用什么格式转换器可以转换?qsv视频格式转换器如何免费把qsv格式转换为mp4格式第五人格抄袭第五人格逃生模式与猫和老鼠如出一辙,这是否存在抄袭?第五人格抄袭有像第五人格那种游戏吗?
快速域名备案 过期域名抢注 naning9韩国官网 加勒比群岛 宕机监控 174.127.195.202 12306抢票攻略 轻量 圣诞节促销 国外网站代理服务器 云鼎网络 嘟牛 个人空间申请 免费网站申请 ftp教程 新天域互联 双11秒杀 空间合租 百度云1t 空间技术网 更多