VB教程03.查找和排序_第1頁
VB教程03.查找和排序_第2頁
VB教程03.查找和排序_第3頁
VB教程03.查找和排序_第4頁
VB教程03.查找和排序_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

查找查找——也叫檢索,是根據給定的某個值,在表中確定一個關鍵字等于給定值的記錄或數據元素關鍵字——是數據元素中某個數據項的值,它可以標識一個數據元素查找方法評價查找速度占用存儲空間多少算法本身復雜程度平均查找長度ASL(AverageSearchLength):為確定記錄在表中的位置,需和給定值進行比較的關鍵字的個數的期望值叫查找算法的~1順序查找查找過程:從表的一端開始逐個進行記錄的關鍵字和給定值的比較算法描述i例01234567891011513192137566475808892找6464監(jiān)視哨iiii比較次數=5比較次數:查找第n個元素:1查找第n-1個元素:2……….查找第1個元素:n查找第i個元素:n+1-i查找失?。簄+1順序查找方法的ASL2折半查找查找過程:每次將待查記錄所在區(qū)間縮小一半適用條件:采用順序存儲結構的有序表算法實現設表長為n,low、high和mid分別指向待查元素所在區(qū)間的上界、下界和中點,k為給定值初始時,令low=1,high=n,mid=(low+high)/2讓k與mid指向的記錄比較若k==r[mid].key,查找成功若k<r[mid].key,則high=mid-1若k>r[mid].key,則low=mid+1重復上述操作,直至low>high時,查找失敗算法描述lowhighmid例1234567891011513192137566475808892找211234567891011513192137566475808892lowhighmid1234567891011513192137566475808892lowhighmid例1234567891011513192137566475808892lowhighmid找701234567891011513192137566475808892lowhighmid1234567891011513192137566475808892lowhighmid1234567891011513192137566475808892lowhighmid1234567891011513192137566475808892lowhigh1185110742936判定樹:1234567891011513192137566475808892算法評價判定樹:描述查找過程的二叉樹叫~有n個結點的判定樹的深度為log2n+1折半查找法在查找過程中進行的比較次數最多不超過其判定樹的深度折半查找的ASL3分塊查找查找過程:將表分成幾塊,塊內無序,塊間有序;先確定待查記錄所在塊,再在塊內查找適用條件:分塊有序表算法實現用數組存放待查記錄,每個數據元素至少含有關鍵字域建立索引表,每個索引表結點含有最大關鍵字域和指向本塊第一個結點的指針算法描述Ch7_3.c12345678910111213141516171822121389203342443824486058745786532248861713索引表查38分塊查找方法評價ASL最大最小兩者之間表結構有序表、無序表有序表分塊有序表存儲結構順序存儲結構線性鏈表順序存儲結構順序存儲結構線性鏈表查找方法比較順序查找折半查找分塊查找4哈希查找基本思想:在記錄的存儲地址和它的關鍵字之間建立一個確定的對應關系;這樣,不經過比較,一次存取就能得到所查元素的查找方法定義哈希函數——在記錄的關鍵字與記錄的存儲地址之間建立的一種對應關系叫~哈希函數是一種映象,是從關鍵字空間到存儲地址空間的一種映象哈希函數可寫成:addr(ai)=H(ki)ai是表中的一個元素addr(ai)是ai的存儲地址ki是ai的關鍵字關鍵字集合存儲地址集合hash哈希表——應用哈希函數,由記錄的關鍵字確定記錄在表中的地址,并將記錄放入此地址,這樣構成的表叫~哈希查找——又叫散列查找,利用哈希函數進行查找的過程叫~例30個地區(qū)的各民族人口統(tǒng)計表編號地區(qū)別總人口漢族回族…...1北京2上?!?..…...以編號作關鍵字,構造哈希函數:H(key)=keyH(1)=1H(2)=2以地區(qū)別作關鍵字,取地區(qū)名稱第一個拼音字母的序號作哈希函數:H(Beijing)=2H(Shanghai)=19H(Shenyang)=19從例子可見:哈希函數只是一種映象,所以哈希函數的設定很靈活,只要使任何關鍵字的哈希函數值都落在表長允許的范圍之內即可沖突:key1key2,但H(key1)=H(key2)的現象叫~同義詞:具有相同函數值的兩個關鍵字,叫該哈希函數的~哈希函數通常是一種壓縮映象,所以沖突不可避免,只能盡量減少;同時,沖突發(fā)生后,應該有處理沖突的方法哈希函數的構造方法直接定址法構造:取關鍵字或關鍵字的某個線性函數作哈希地址,即H(key)=key或H(key)=a·key+b特點直接定址法所得地址集合與關鍵字集合大小相等,不會發(fā)生沖突實際中能用這種哈希函數的情況很少數字分析法構造:對關鍵字進行分析,取關鍵字的若干位或其組合作哈希地址適于關鍵字位數比哈希地址位數大,且可能出現的關鍵字事先知道的情況例有80個記錄,關鍵字為8位十進制數,哈希地址為2位十進制數8134653281372242813874228130136781322817813389678136853781419355…..…..分析:只取8只取1只取3、4只取2、7、5數字分布近乎隨機所以:取任意兩位或兩位與另兩位的疊加作哈希地址平方取中法構造:取關鍵字平方后中間幾位作哈希地址適于不知道全部關鍵字情況折疊法構造:將關鍵字分割成位數相同的幾部分,然后取這幾部分的疊加和(舍去進位)做哈希地址種類移位疊加:將分割后的幾部分低位對齊相加間界疊加:從一端沿分割界來回折送,然后對齊相加適于關鍵字位數很多,且每一位上數字分布大致均勻情況例關鍵字為:0442205864,哈希地址位數為4586442200410088H(key)=0088移位疊加5864022404

6092H(key)=6092間界疊加除留余數法構造:取關鍵字被某個不大于哈希表表長m的數p除后所得余數作哈希地址,即H(key)=keyMODp,pm特點簡單、常用,可與上述幾種方法結合使用p的選取很重要;p選的不好,容易產生同義詞處理沖突的方法開放定址法方法:當沖突發(fā)生時,形成一個探查序列;沿此序列逐個地址探查,直到找到一個空位置(開放的地址),將發(fā)生沖突的記錄放到該地址中,即Hi=(H(key)+di)MODm,i=1,2,……k(km-1)其中:H(key)——哈希函數

m——哈希表表長

di——增量序鏈地址法例表長為11的哈希表中已填有關鍵字為17,60,29的記錄,

H(key)=keyMOD11,現有第4個記錄,其關鍵字為38,按三種處理沖突的方法,將它填入表中012345678910601729(1)H(38)=38MOD11=5沖突38例已知一組關鍵字(19,14,23,1,68,20,84,27,55,11,10,79)

哈希函數為:H(key)=keyMOD13,

用鏈地址法處理沖突012345678910111214^127796855198420231011^^^^^^^^^^^^鏈地址法方法:將所有關鍵字為同義詞的記錄存儲在一個單鏈表中,并用一維數組存放頭指針哈希查找過程及分析哈希查找過程給定k值計算H(k)此地址為空關鍵字==k查找失敗查找成功按處理沖突方法計算HiYNYN哈希查找分析哈希查找過程仍是一個給定值與關鍵字進行比較的過程評價哈希查找效率仍要用ASL哈希查找過程與給定值進行比較的關鍵字的個數取決于:哈希函數處理沖突的方法哈希表的填滿因子=表中填入的記錄數/哈希表長度排序排序定義——將一個數據元素(或記錄)的任意序列,重新排列成一個按關鍵字有序的序列叫~排序分類按待排序記錄所在位置內部排序:待排序記錄存放在內存外部排序:排序過程中需對外存進行訪問的排序按排序依據原則插入排序:直接插入排序、折半插入排序、希爾排序交換排序:冒泡排序、快速排序選擇排序:簡單選擇排序其它排序:堆排序等排序基本操作比較兩個關鍵字大小將記錄從一個位置移動到另一個位置1插入排序直接插入排序排序過程:整個排序過程為n-1趟插入,即先將序列中第1個記錄看成是一個有序子序列,然后從第2個記錄開始,逐個進行插入,直至整個序列有序算法描述例49386597761327i=238(3849)6597761327i=365(384965)97761327i=497(38496597)761327i=576(3849657697)1327i=613(133849657697)27i=1()i=7(133849657697)2727jjjjjj977665493827

(13273849657697)排序結果:算法評價時間復雜度若待排序記錄按關鍵字從小到大排列(正序)關鍵字比較次數:記錄移動次數:2(n-1)若待排序記錄按關鍵字從大到小排列(逆序)關鍵字比較次數:記錄移動次數:若待排序記錄是隨機的,取平均值關鍵字比較次數:記錄移動次數:T(n)=O(n2)空間復雜度:S(n)=O(1)折半插入排序排序過程:用折半查找方法確定插入位置的排序叫~例i=1(30)1370853942620i=213(1330)70853942620i=76(6133039427085)20…...i=820(6133039427085)20sjmi=820(6133039427085)20sjmi=820(6133039427085)20sjmi=820(6133039427085)20sji=820(613203039427085)算法描述算法評價比較的次數大大減少,全部元素比較次數僅為O(nlog2n)。雖然比較次數大大減少,可惜移動次數并未減少,所以排序效率仍為O(n2)時間復雜度:T(n)=O(n2)空間復雜度:S(n)=O(1)希爾排序(縮小增量法)排序過程:先取一個正整數d1<n,把所有相隔d1的記錄放一組,組內進行直接插入排序;然后取d2<d1,重復上述分組和排序操作;直至di=1,即所有記錄放進一個組中排序為止取d3=1三趟排序:4132738484955657697例初始:4938659776132748554一趟排序:13

27

48

55

4

49

38

65

97

76二趟排序:13

4

48

38

27

49

55

65

97

76取d1=5一趟分組:49

38

65

97

76

13

27

48

55

4取d2=3二趟分組:13

27

48

55

4

49

38

65

97

76希爾排序特點子序列的構成不是簡單的“逐段分割”,而是將相隔某個增量的記錄組成一個子序列希爾排序可提高排序速度,因為分組后n值減小,n2更小,而T(n)=O(n2),所以T(n)從總體上看是減小了關鍵字較小的記錄跳躍式前移,在進行最后一趟增量為1的插入排序時,序列已基本有序增量序列取法無除1以外的公因子最后一個增量值必須為12交換排序冒泡排序排序過程將第一個記錄的關鍵字與第二個記錄的關鍵字進行比較,若為逆序r[1].key>r[2].key,則交換;然后比較第二個記錄與第三個記錄;依次類推,直至第n-1個記錄和第n個記錄比較為止——第一趟冒泡排序,結果關鍵字最大的記錄被安置在最后一個記錄上對前n-1個記錄進行第二趟冒泡排序,結果使關鍵字次大的記錄被安置在第n-1個記錄位置重復上述過程,直到“在一趟排序過程中沒有進行過交換記錄的操作”為止[初態(tài)]:4682405267312173i=1:4640526731217382i=2:4046523121677382i=3:4046312152677382i=4:4031214652677382i=5:3121404652677382i=6:2131404652677382i=7:2131404652677382算法描述算法評價時間復雜度最好情況(正序)比較次數:n-1移動次數:0最壞情況(逆序)比較次數:移動次數:空間復雜度:S(n)=O(1)T(n)=O(n2)快速排序基本思想:通過一趟排序,將待排序記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分記錄的關鍵字小,則可分別對這兩部分記錄進行排序,以達到整個序列有序排序過程:對r[s……t]中記錄進行一趟快速排序,附設兩個指針i和j,設樞軸記錄rp=r[s],x=rp.key初始時令i=s,j=t首先從j所指位置向前搜索第一個關鍵字小于x的記錄,并和rp交換再從i所指位置起向后搜索,找到第一個關鍵字大于x的記錄,和rp交換重復上述兩步,直至i==j為止再分別對兩個子序列進行快速排序,直到每個子序列只含有一個記錄為止例初始關鍵字:4938659776132750ijxji完成一趟排序:(273813)49(76976550)分別進行快速排序:(13)27(38)49(5065)76(97)快速排序結束:13273849

溫馨提示

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

評論

0/150

提交評論