第三單元 查找算法_第1頁
第三單元 查找算法_第2頁
第三單元 查找算法_第3頁
第三單元 查找算法_第4頁
第三單元 查找算法_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第三單元查找算法夯實考點考點1順序查找1.查找算法所謂查找就是在指定的數(shù)據(jù)中尋找某一特定的數(shù)據(jù)。查找結果有兩種,找到(查找成功)和未找到(查找失敗)。2.順序查找的基本思想從第一個數(shù)據(jù)開始,從左往右(或從上到下)將數(shù)據(jù)按順序逐個與給定的關鍵字進行比較,若某個數(shù)據(jù)和給定的關鍵字相等,則查找成功,找到并輸出第一個與關鍵字相等的數(shù)據(jù)的位置;反之,查找失敗。若有n個數(shù),則可能的最多查找次數(shù)為n。3.順序查找算法基本框架假設:要查找的數(shù)為key,待查找的數(shù)存放在數(shù)組d中。For語句框架:

Fori=1ton若d(i)=key,則表示找到,做相應處理

Nexti若i>n表示未找到DoWhile語句框架:

i=1

Dowhilei<=n若d(i)=key,則表示找到,做相應處理

i=i+1

Loop若i>n表示未找到4.順序查找的程序實現(xiàn)在n個數(shù)組元素中依次查找,找到第1個滿足條件的值,查找即結束,輸出找到元素所在的位置;若找不到,輸出“未找到”。程序實現(xiàn):設:(1)要查找的數(shù)據(jù)是key(在文本框Text1中輸入),查找的數(shù)據(jù)存放在數(shù)組d中。(2)pos為找到數(shù)的位置,pos=0表示未找到。(3)p記錄查找的次數(shù)。key=Val(Text1.Text)

'Val要根據(jù)實際情況決定是否要添加

p=0

pos=0

find=False

'find=False表示未找到,find=True表示找到

i=1

DoWhilei<=nAndfind=False

'表示還沒找完并且還未找到,則繼續(xù)查找,notfind也可表示為find=False

p=p+1

Ifkey=d(i)Then

pos=i

find=True

EndIf

i=i+1

Loop

IffindThen'也可表示為Iffind=TrueThen

Text2.Text="在d("+Str(pos)+")中"

Else

Text2.Text="未找到"

EndIf典例1

某查找算法的部分VB代碼如下:t=Falsei=0DoWhilei<7Andt=False

i=i+1

Ifa(i)=keyThent=TrueLoopIft=FalseTheni=0數(shù)組元素a(1)到a(7)的數(shù)據(jù)依次為“3,5,1,5,8,9,5”,當變量key值為5時,運用該算法處理后,變量i的值是(

)A.0 B.2 C.4 D.7解析:本題主要考查的是順序查找的實現(xiàn)過程。本程序的功能是查找數(shù)組中第一個與目標數(shù)據(jù)相等的數(shù),若找到將其在數(shù)組中的位置賦給變量i,結束查找;若找不到,變量i=0。因為目標值key=5,它和數(shù)組中第二個數(shù)正好相等,因此i=2。答案:B典例2編寫一個VB程序,實現(xiàn)如下功能:在列表框List1中顯示十個字符串,十個字符串存放在數(shù)組s中,在文本框Text1中輸入一個字符串,單擊“統(tǒng)計”按鈕,統(tǒng)計字符串出現(xiàn)的次數(shù),若出現(xiàn)次數(shù)大于0,則在文本框Text2中顯示實際次數(shù),若出現(xiàn)次數(shù)為0,則在文本框Text2中顯示“找不到”。程序運行效果如圖3-1所示。為實現(xiàn)上述功能,請在程序劃線處填入合適的語句:程序①處語句為

;

程序②處語句為

;

程序③處語句為

。

解析:要查找的字符為st,st通過文本框Text1中輸入得到,因此①處語句為Text1.Text;將要查找的字符串按順序與數(shù)組s中元素比較,如果相等,則進行計數(shù),因此②處語句為s(i)=st;根據(jù)題目“若出現(xiàn)次數(shù)大于0,則在文本框Text2中顯示實際次數(shù),若出現(xiàn)次數(shù)為0,則在文本框Text2中顯示“找不到”??芍厶幍恼Z句為num>0或num<>0。答案:①Text1.Text②s(i)=st③num>0或num<>0典例3

某6位學生的學號存儲在數(shù)組元素a(1)到a(6)中,其數(shù)據(jù)依次為“2015001,2015003,2015078,2015010,2015788,2015666”。使用順序查找算法查找學號2015700,則共需查找次數(shù)為(

)A.0 B.5 C.6 D.7解析:本題考查的是順序查找算法的實現(xiàn)過程。由于給定的數(shù)組中沒有數(shù)據(jù)2015700,因此需要與數(shù)組中每個數(shù)進行比較,因此共需查找次數(shù)為6次。答案:C考點2對分查找1.對分查找的基本思想在有序的數(shù)據(jù)序列中(一般存放在數(shù)組中),首先把要查找的數(shù)據(jù)與數(shù)組中間位置的元素進行比較,如果相等,則查找成功并退出查找;否則,根據(jù)數(shù)組元素的有序性,確定數(shù)據(jù)應在數(shù)組的前半部分還是在后半部分查找;在確定了新的查找范圍后,重復進行以上比較,直到找到或未找到為止?!局仉y點剖析】①對分查找的前提是被查找的數(shù)據(jù)序列必須是有序。②“未找到”是指當指定范圍內的起點大于終點仍未找到該數(shù)據(jù)。2.對分查找算法基本框架說明:要查找的數(shù)為key,待查找的數(shù)存放在數(shù)組d中。

i為查找范圍的起點,j為查找范圍的終點,m為范圍[i,j]的中間位置。

i=1

j=n

DoWhilei<=j計算中點位置m比較key與d(m),并做相應處理

Loop若i>j,則表示未找到3.對分查找程序實現(xiàn)在n個數(shù)組元素中依次查找,找到第1個滿足條件的值,查找就結束,輸出找到元素所在的位置;若找不到,輸出“未找到”。程序實現(xiàn):設要查找的數(shù)據(jù)是key(在文本框Text1中輸入),查找的數(shù)據(jù)存放在數(shù)組d中。在文本框Text2中輸出查找結果,若找到輸出“找到!位置為:X”,否則輸出“未找到!”在文本框Text3中輸出共查找的次數(shù)。p表示查找的次數(shù)。核心代碼為(以升序為例):key=Val(Text1.Text)

′表示要查找的數(shù)

p=0

′表示查找的次數(shù)

find=False

′查找的結果,若find=True表示找到,find=False表示未找到

i=1

′查找范圍的起點

j=n

′查找范圍的終點

DoWhilei<=jAndNotfind

′如果還未找完并且未找到

p=p+1

′查找次數(shù)計數(shù)

m=(i+j)/2

′計算中點位置m

Ifkey=d(m)Then

′表示找到的情況

find=True

Text2.Text="找到!位置為:"+Str(m)

EndIf

Ifkey>d(m)Then

′表示查找的數(shù)比中間位置上的數(shù)大時

i=m+1

Else

′表示查找的數(shù)比中間位置上的數(shù)小時

j=m-1

EndIfLoop

IfNotfindThenText2.Text="未找到!"Text3.Text="共查找的次數(shù)為:"+Str(p)【重難點剖析】計算中點位置的語句還可以寫成:m=Int((i+j)/2)或m=Fix((i+j)/2)。典例4(2015浙江省10月選考題)已知單調函數(shù)在[0,1]區(qū)間存在一個x0,使f(x0)=0?,F(xiàn)用對分查找算法搜索x0的值,開始搜索區(qū)間為[0,1],若經(jīng)過10次對分查找后還需繼續(xù)搜索,則第11次搜索區(qū)間的長度為(

)A.1/2 B.1/10 C.1/102 D.1/210解析:本題主要考查的是對分查找算法。在[0,1]區(qū)間內查找一個數(shù),第一次取[0,1]區(qū)間中間值0.5,如果f(0.5)<0,則第二次區(qū)間為[0.5,1],如果f(0.5)>0,則第二次區(qū)間為[0,0.5],每次都減少為原來的1/2,所以答案為D。答案:D典例5a數(shù)組(a(1)~a(8))中存儲了8本圖書的價格,其數(shù)據(jù)依次為“105,98,95,60,55,35,12,8”。現(xiàn)使用對分查找數(shù)據(jù)8,需要查找的次數(shù)是(

)A.1 B.2 C.3 D.4解析:本題主要考查的是對分查找算法的實現(xiàn)過程。根據(jù)計算公式m=(i+j)/2可知,第一次訪問的數(shù)據(jù)為60(第4個),第二次訪問的數(shù)據(jù)為35(第6個),第三次訪問的數(shù)據(jù)為12(第7個),第四次訪問的數(shù)據(jù)為8(第8個),因此答案為D。答案:D典例6某數(shù)組有10個數(shù)據(jù),依次為1,2,3,4,5,6,7,8,9,10,現(xiàn)要查找某一數(shù)據(jù),若使用對分查找目標數(shù)據(jù),需查找兩次,若用順序查找需查找8次,則要查找的目標數(shù)據(jù)為(

)A.2 B.3 C.7 D.8解析:本題考查的是兩種查找算法。根據(jù)順序查找次數(shù)即可判定目標數(shù)據(jù)為8,我們再用對分查找進行驗證,第一次查找的位置是m=(1+10)/2=5,第二次查找的位置是m=(6+10)/2=8,第8個位置上的數(shù)就是8,因此答案為D。答案:D典例7小明編寫了一個學生IC卡余額查詢系統(tǒng),其功能是在文本框Text1中輸入學生的IC卡號,單擊“查詢余額”按鈕Command1后,在標簽Label3中輸出查找結果。程序運行效果如圖3-2所示。程序說明:(1)學生的IC卡號保存在數(shù)組card中,并已按升序排序好;卡中金額保存在數(shù)組money中。例:第i個學生的卡號保存在card(i)中,其對應的金額保存在money(i)中。(2)如果在數(shù)據(jù)庫中找到此卡號,則在標簽Label3中顯示“此卡號余額為”及對應的余額,如果未找到則顯示“查無此號!”。(3)程序運行,將在左邊列表框List1中顯示學生的卡號和金額。解決此問題的部分程序段如下:Constn=1500

′設共有n張卡Dimcard(1Ton)AsLongDimmoney(1Ton)AsSinglePrivateSubForm_Load()

′此過程用于輸入卡號及金額,并存儲在數(shù)組card和money中代碼略EndSubPrivateSubCommand1_Click()DimxAsLong,iAsLong,jAsLong,mAsLong,findAsBooleanx=Val(Text1.Text)i=1

find=False

DoWhile②

m=(i+j)/2

Ifx=card(m)Then

ElseIfx<card(m)Then

j=m-1

Else

i=m+1

EndIfLoopIffind=TrueThen

Label3.Caption="此卡號余額為"+④+"元"

Else

Label3.Caption="查無此號!"

EndIfEndSub(1)解決此問題的算法是

。(選填:對分查找或順序查找)

(2)在程序①,②,③,④劃線處填入適當?shù)恼Z句或表達式,將程序補充完整:程序中①劃線處應填入

。

程序中②劃線處應填入

。

程序中③劃線處應填入

。

程序中④劃線處應填入

解析:本題考查的是對分查找算法的程序實現(xiàn)。對分查找的關鍵在于確定每次查找的范圍,程序用變量i,j表示查找的范圍,根據(jù)劃線①處前面的語句可以確定①處的語句應表示首次查找范圍的終點,即j=n;劃線②處的語句表示查找的條件,如果還沒找完并且還

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論