




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
實驗一二分搜索算法實驗報告實驗目的1、理解分治算法的概念和基本要素;2、理解遞歸的概念;3、掌握設計有效算法的分治策略;4、通過二分搜索技術學習分治策略設計技巧;實驗內容及要求使用二分搜索算法查找任總N個有序數列中的指定元素。通過上機實驗進行?算法實現。保存和打印出程序的運行結果,并結合程序進行分析,上交實驗報告。4-至少使用兩種方法進行編程。二?實驗原理二分搜索算法也稱為折半査找法,它充分利用了元素間的次序關系,采用分治第略,可在最壞的情況下用Odogn)完成搜索任務?!净舅枷搿繉個元素分成個數人致相同的兩半,取a[M2]與欲査找的X作比較,如果x=arn/2]則找到x,算法終止。如果x<arn/2],則我們只要在數組a的左半部繼續(xù)搜索x(這里假設數組元素呈升序排列)。如果x>a[n/2],則我們只要在數組a的右半部繼續(xù)搜索也二分搜索法的應用極其廣泛,而且它的思想易于理解。第?個二分搜索算法早在1916年就出現了,但是第?個完全正確的二分搜索算法直到1962年才出現。Bentley在他的著作WritingCorrectPrograms》中寫道,潞的計算機專家不能在2小時內寫出完全正確的二分搜索算法。問題的關鍵在于準確地制定各次査找范圍的邊界以及終止條件的確定,正確地歸納奇偶數的各種情況,其實整理后可以發(fā)現它的具體算法是很直觀的。方法一:直接查找窮舉法遍歷方法二:遞歸查找^include<stdio.h>^defineMAX30intBinarySearch(inta[],int&intleft,intright){if(left>right){returnT;}else{left=(left+right)/2:if(x==alleft])returnleft:else{if(x>a[left])BinarySearch(a,x,le£t+l,right):elseBinarySearch(a,x,le£t*2~right,left+1):}}}main(){inta:MAXj:intfound,x,n,i,j,p:printf(*輸的個數\n"):scanf(飛d",&n):printf("數組數據\n"):for(i=0;i<n:i++){seanf(飛Sali]):}for(i=0:i<n_l:i++)p=i:for(j=i+l:j<n:j++)if(alp]>alj])P=J:if(p!=j)>:=aIp]:a[p]=a[i]:a[i]=x:}}for(i=0;i<n:i++){printf,a[i]);}printf("輸入要査找的數\n");scan£&x):found=BinarySearch(a,x,0,n):if(found==~l){printf(*未找到\rT>:}else{printf("要査找的數在第%d個\n",found-1):}}方法三:迭代查找^include<stdio.h>#defineMAX30intBinarySearch(inta[],intintn){intleft=0:intright=n~l:intmiddle:while(left<=right){middle=(le£t+right)/2;if(x==aImiddle])returnmiddle;if(x>a[middlej)left=m£ddle^l:elserigh*=middle-l:}re*urn-l:}main()inta:MAXj:intfound,x,n,i,j,p:printfC數的個數\n"):scanf&n):printfC數組數據\n"):for(i=0:i<n;i++){seanf4a[i]):}for(i=0:i<n_l:i++)P=i:for(j=i+l:j<n;j++)if(aIp]>a[j])P=j:if(p!=j){x=a[p]:alp]=ali]:a[i]=x:}}for(i=0:i<n;i++){printf(*%d”,a[i]):}printfC輸入要査找的數\n"):scanf&x):found=BinarySearch(a,x,n):if(found==~l){printf("未找到:printf("要査找的數在第個\tT,found^l):四?程序代碼變量定義說明:BinarySmarch()算法:a->數組key?>要査找的元素left-〉左標志right-)右標志(n->數據個數)MainO主函數:ound-》是否找到標志,-1衣示未找到,找到其值為下標要査找的元素曠>元素個數i,j,P-〉循環(huán)控制變量(1)、遞歸查找^include<stdio.h>^defineMAX30intBinarySearch(inta[],intkey,intleft,intright){intmid=(right-right)/2+left:if(almidj==key){returnmid:}if(left>=right){returnT:}elseif(key>aImidj){returnBinarySearch(a,key,mid+1,right):}elseif(key<aImidj){returnBinarySearch(a,key,left,mid~l):}returnT:}intmain(void){inta:MAXj:intfound,x,n,i,j,p:printfC數據個數:”):scanprintfC輸入數據:\n"):for(i=0:i<n:i++){printW請輸入第崗個數據二i):seanf(^,&a[i]):}for(i=0:i<n-1:i++)〃選擇排序{P=i:for(j=i+l;j<n:j++)if(a[p]>a[j])P巧;if(P!=j){x=a[p]:alp]=a[i]:ali]=x:}}printfCtll-Jf后的數據如下:”):for(i=0:i<n:i++){printfa[i]);}print£("\“"):printfC輸入要査找的數:"):scanx);intleft=O,right=n:found=BinarySearch(a,x,left,right):if(found==~l){printf(*未找到\n"):}else{primf("要ft找的數在第%d個\n",found+1):}}(2)、非遞歸查找^include<stdio.h>^defineMAX30intBinarySearch(inta[],intkey,intlen){intmid=len/2:if(key==aImidj){returnmid:}intleft=0;intright=len~l:while(left<=right){"迭代查找mid=(right+left)/2:if(key<almid]){right=mid-l:}elseif(key>a[mid]){
left=rnid-?-l:}else{returnmid:}}returnT;}intmain(void){inta:MAXj:intfound,x,n,i,j,p:printfr數據個數:”):scan£(飛d",&n):printfC輸入數據::for(i=0:i<n;i++){printfC請輸入第%d個數據:",i);seanfCW,&a[i]):p=l:for(j=i+l:j<n:j++)if(a[p]>a[j])p=j:if(p!=j){x=a[p];a[p]=a[i]:a:ij=x:}}printf("排序后的數據如下:w):for(i=0:i<n:i++){printf,a[i]):}printf<*\n*):printfL輸入要査找的數:”〉:scanf&x):intleft=0,right=n:found=BinarySearch(a,x,n):if(found==~l){printf("未找到\n*>:}else{printf("耍査找的數在第鴛d個\n*,found+l):}}五.結果運行與分析找到要査找的數據:■LAU8?,'BDA0KUintnf?\?f-re*TwipVKftfi*jttf1illIfK:6也人請輸人第葉故據:制hir:ji::諭輛人笫.i—jftIRiHlllrI9XtHE卜■舅羽66埸柳人WPH4川?。褐谱Ρ?:‘:一未找到要查找的數據:■-SlhrhgnjmrrrtWzrA:G對任妝p:iSVi人兀1個右戈帳:3ifi^;謝輸人斤?:力於JiCul.b“?U?j.iltJWIWi12zy?11A典?>IW[:IJy狛LE123143?69輸幾“卄期潮葉:七;?*F1?????』???六?心得與體會通過這次實驗,鞏固了自己對二分搜索算法的理解,它是分治法的一個特殊例子,由此也對分治法有了更深一層次的認識。分而治之,化復雜為簡單,不只是在算法中,在口常生活中也是極其重要的。正如Bentl
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025贛州市產權交易委托合同
- 2024年生物基因測序服務合同
- 2025股權收益權類項目質押合同
- 二零二五年度分手后情感修復協(xié)議3篇
- 二零二五年度2025版商業(yè)租賃證辦理合同范本2篇
- 2024年抵押房產買賣協(xié)議書:專業(yè)律師見證3篇
- 2025版高端醫(yī)療器械采購合同6篇
- 二零二五年度企業(yè)合同電子化管理實施意見建議書3篇
- 2024抗訴房屋買賣協(xié)議標準版協(xié)議爭議文件版
- 二零二五年度GPS航空遙感數據采集服務合同
- 工會經費收支預算表
- 舒爾特方格55格200張?zhí)岣邔W⒘4紙直接打印版
- 質量管理體系各條款的審核重點
- 聚丙烯化學品安全技術說明書(MSDS)
- 流動資金測算公式
- BBC美麗中國英文字幕
- 衛(wèi)生院工程施工組織設計方案
- CDR-臨床癡呆評定量表
- 《八年級下學期語文教學個人工作總結》
- 鋁合金門窗制作工藝卡片 - 修改
- 恒亞水泥廠電工基礎試題
評論
0/150
提交評論