- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
1查找与排序(páixù)技术第一页,共63页。
23.1.1顺序(shùnxù)查找顺序查找(顺序搜索):在线性表中顺序查找指定(zhǐdìng)的元素。顺序查找的基本方法:从线性表的第一个元素开始,依次将线性表中的元素与被查元素进行比较,若有相等则表示找到(查找成功);若线性表中的所有元素都与被查元素进行了比较但都不相等,则表示线性表中没有要找到的元素(查找失败)。第1页/共63页第二页,共63页。
3举例说明举例:设A是n个元素(yuánsù)的一维数组。对于指定的输入x,如果x在数组中,则顺序找到它第一次出现处的下标;如果x在数组中,则以下标作为查找结果。否则以-1作为结果第2页/共63页第三页,共63页。
4#definen5/*n为查找表中元素个数的最大可能(kěnéng)值*/#defineMAXLENn+1 intseqsearch(intA[],intk) { inti; i=0; A[MAXLEN-1]=k;while(A[i]!=k) i++; if(iMAXLEN-1) returni; /*查找成功,返回被查元素在表中的相对位置*/ elsereturn-1;/*查找失败,返回-1*/ }使用了监视哨,在查找(cházhǎo)过程中,不用每一步都去判断是否查找(cházhǎo)结束。找到:返回元素在线性表中的存储位置;未找到:返回-1。第3页/共63页第四页,共63页。
5#includestdio.h voidmain(){ intj,a[]={11,21,2,45,90},h=8; j=seqsearch(a,h); printf(%d,j);}第4页/共63页第五页,共63页。
6顺序查找(cházhǎo)的效率如果线性表中的第一个元素就是(jiùshì)被查找元素,只需要做一次比较就查找成功;如果被查的元素是线性表中的最后一个元素,或者被查元素根本不在线性表中,则需要与线性表中的所有元素进行比较(最坏情况);平均情况:利用顺序查找法在线性表中查找一个元素,大约要与线性表中一半的元素进行比较。第5页/共63页第六页,共63页。
7结论(jiélùn)对于大的线性表来说,顺序查找的效率是很低的。但在下列两种情况(qíngkuàng)下也只能采用顺序查找:如果线性表为无序表(表中元素的排列是无序的),则不管是顺序存储结构还是链式存储结构,都只能用顺序查找表;即使是有序线性表,如果采用链式存储结构,也只能用顺序查找。第6页/共63页第七页,共63页。
83.1.2有序表的对分查找(cházhǎo)有序表:线性表中的元素按值非递减或者非递增排列。对分查找(cházhǎo)的过程:将被查找(cházhǎo)关键字与线性表中间的项目进行比较,有三种可能:若被查关键字与表中间的项目相等,则查到,过程结束;若被查关键字大于表中间的项目,则取表的后半部分作为新表再去查找(cházhǎo);若被查关键字小于表中间的项目,则取表的前半部分作为新表再去查找(cházhǎo)。升序降序查找(cházhǎo)成功!在后半部分查找!在前半部分查找!减半递推!第7页/共63页第八页,共63页。
9时间(shíjiān)效率分析对分查找是根据每次试探(shìtàn)的结果将线性表的规模减半,并有规则地括出可能包含被查项目的部分。最坏情况:对查找需要的比较次数为n为线性表的长度。局限性:只适用于有序表,且只限于顺序存储结构。第8页/共63页第九页,共63页。
10#definen6/*n为查找(cházhǎo)表中元素个数的最大可能值*/#defineMAXLENnintbinsearch(intA[],intk) { intlow,mid,high; low=0; high=MAXLEN-1;while(low=high) { mid=(low+high)/2;if(k==A[mid])returnmid;/*查找(cházhǎo)成功,返回被查元素在表中的相对位置*/ elseif(kA[mid]) low=mid+1; else high=mid-1; } return-1; /*查找(cházhǎo)失败,返回-1*/ }第9页/共63页第十页,共63页。
11#includestdio.h voidmain(){ intj,a[]={2,11,21,45,77,90},h=90; j=binsearch(a,h); printf(%d,j);}第10页/共63页第十一页,共63页。
123.1.3分块查找(cházhǎo)分块
文档评论(0)