




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
從順序查找到二分查找從順序查找到二分查找查找給定一個值Key,在含有n個元素的數組中找出等于給定值Key的元素。若找到,則查找成功,返回元素的信息或該元素在表中的位置;否則查找失敗,返回相關的指示信息。查找給定一個值Key,在含有n個元素的數組中找出等于給定值K順序查找從數組的一端開始,順序掃描數組,依次將掃描到的元素和給定值Key相比較。若當前掃描到的元素與Key相等,則查找成功;若掃描結束后,仍未找到元素等于Key的結點,則查找失敗。順序查找從數組的一端開始,順序掃描數組,依次將掃描到的元素和開始輸入待查找的值給變量keyi=1i<=n?a(i)=key?Yi=i+1N輸出“找不到”N輸出“找到了”Y程序流程圖結束開始輸入待查找的值給變量keyi=1i<=n?a(i)=k順序查找的效率n個元素的數組:最快:1次最慢:n次順序查找的效率n個元素的數組:思考如果數組是有序的,有沒有效率更高的算法?二分(對分)查找思考如果數組是有序的,有沒有效率更高的算法?二分(對分)查找二分查找(在一個升序的數組里)i=1:j=n:key=120確定查找的中點位置m=(i+j)\2將待找的Key與a(m)比較:若相等,則查找成功并返回此位置,查找結束。否則確定新的查找區間,繼續二分查找:若Key<a(m),則要找的Key可能在m左邊的子數組a(1..m-1)中,故新的查找區間是左子數組a(1..m-1)中。若Key>a(m),則要找的Key可能在m的右子數組a(m..n)中,即新的查找區間是右子表a(m+1..n)。……二分查找(在一個升序的數組里)i=1:j=n:key2156789810110611012012513021567898101106110120125130Key=10621567898101106110120125130i=1j=10m=(i+j)\2=5i=m+1=6j=10m=8Key>a(m)Key<a(m)i=6j=m-1=7m=6Key=a(m)215678981011061101201251302156Key=6521567898101106110120125130i=1j=10m=5j=m-1=4mid=2Key<a(m)2156789810110611012012513021567898101106110120125130i=1i=3j=4Key>a(m)m=3j=m-1=2i>j還繼續嗎??Key=65215678981011061101201251二分查找i=1,j=n確定查找的中點位置m=(i+j)\2將待找的Key與a(m)比較:若相等,則查找成功并返回此位置,查找結束。否則確定新的查找區間,繼續二分查找:若Key<a(m),則要找的Key可能在m左邊的子數組a(1..m-1)中,故新的查找區間是左子數組a(1..m-1)中。若Key>a(m),則要找的Key可能在mid的右子數組a(m+1..n)中,即新的查找區間是右子表a(m+1..n)。……找不到時結束的條件:i>j二分查找i=1,j=n開始輸入待查找的值給變量keyi=1:j=ni<=j?輸出“找不到”N輸出mY程序流程圖結束key<a(m)?NYj=m-1Ni=m+1Ym=(i+j)\2a(m)=key?開始輸入待查找的值給變量keyi=1:j=ni<=j課堂實踐課堂實踐從順序查找到二分查找課件總結:順序查找與二分查找順序查找二分查找對數組的要求無要求必須是有序的假設數組是有序的前提比較的次數<=n<=int(log2n)+1查找效率低高總結:順序查找與二分查找順序查找二分查找對數組的要求無要求必從順序查找到二分查找從順序查找到二分查找查找給定一個值Key,在含有n個元素的數組中找出等于給定值Key的元素。若找到,則查找成功,返回元素的信息或該元素在表中的位置;否則查找失敗,返回相關的指示信息。查找給定一個值Key,在含有n個元素的數組中找出等于給定值K順序查找從數組的一端開始,順序掃描數組,依次將掃描到的元素和給定值Key相比較。若當前掃描到的元素與Key相等,則查找成功;若掃描結束后,仍未找到元素等于Key的結點,則查找失敗。順序查找從數組的一端開始,順序掃描數組,依次將掃描到的元素和開始輸入待查找的值給變量keyi=1i<=n?a(i)=key?Yi=i+1N輸出“找不到”N輸出“找到了”Y程序流程圖結束開始輸入待查找的值給變量keyi=1i<=n?a(i)=k順序查找的效率n個元素的數組:最快:1次最慢:n次順序查找的效率n個元素的數組:思考如果數組是有序的,有沒有效率更高的算法?二分(對分)查找思考如果數組是有序的,有沒有效率更高的算法?二分(對分)查找二分查找(在一個升序的數組里)i=1:j=n:key=120確定查找的中點位置m=(i+j)\2將待找的Key與a(m)比較:若相等,則查找成功并返回此位置,查找結束。否則確定新的查找區間,繼續二分查找:若Key<a(m),則要找的Key可能在m左邊的子數組a(1..m-1)中,故新的查找區間是左子數組a(1..m-1)中。若Key>a(m),則要找的Key可能在m的右子數組a(m..n)中,即新的查找區間是右子表a(m+1..n)。……二分查找(在一個升序的數組里)i=1:j=n:key2156789810110611012012513021567898101106110120125130Key=10621567898101106110120125130i=1j=10m=(i+j)\2=5i=m+1=6j=10m=8Key>a(m)Key<a(m)i=6j=m-1=7m=6Key=a(m)215678981011061101201251302156Key=6521567898101106110120125130i=1j=10m=5j=m-1=4mid=2Key<a(m)2156789810110611012012513021567898101106110120125130i=1i=3j=4Key>a(m)m=3j=m-1=2i>j還繼續嗎??Key=65215678981011061101201251二分查找i=1,j=n確定查找的中點位置m=(i+j)\2將待找的Key與a(m)比較:若相等,則查找成功并返回此位置,查找結束。否則確定新的查找區間,繼續二分查找:若Key<a(m),則要找的Key可能在m左邊的子數組a(1..m-1)中,故新的查找區間是左子數組a(1..m-1)中。若Key>a(m),則要找的Key可能在mid的右子數組a(m+1..n)中,即新的查找區間是右子表a(m+1..n)。……找不到時結束的條件:i>j二分查找i=1,j=n開始輸入待查找的值給變量keyi=1:j=ni<=j?輸出“找不到”N輸出mY程序流程圖結束key<a(m)?NYj=m-1Ni=m+1Ym=(i+j)\2a
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論