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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

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

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

m——哈希表表長

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

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

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

用鏈地址法處理沖突012345678910111214^127796855198420231011^^^^^^^^^^^^鏈地址法方法:將所有關(guān)鍵字為同義詞的記錄存儲在一個單鏈表中,并用一維數(shù)組存放頭指針哈希查找過程及分析哈希查找過程給定k值計算H(k)此地址為空關(guān)鍵字==k查找失敗查找成功按處理沖突方法計算HiYNYN哈希查找分析哈希查找過程仍是一個給定值與關(guān)鍵字進行比較的過程評價哈希查找效率仍要用ASL哈希查找過程與給定值進行比較的關(guān)鍵字的個數(shù)取決于:哈希函數(shù)處理沖突的方法哈希表的填滿因子=表中填入的記錄數(shù)/哈希表長度排序排序定義——將一個數(shù)據(jù)元素(或記錄)的任意序列,重新排列成一個按關(guān)鍵字有序的序列叫~排序分類按待排序記錄所在位置內(nèi)部排序:待排序記錄存放在內(nèi)存外部排序:排序過程中需對外存進行訪問的排序按排序依據(jù)原則插入排序:直接插入排序、折半插入排序、希爾排序交換排序:冒泡排序、快速排序選擇排序:簡單選擇排序其它排序:堆排序等排序基本操作比較兩個關(guān)鍵字大小將記錄從一個位置移動到另一個位置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)排序結(jié)果:算法評價時間復(fù)雜度若待排序記錄按關(guān)鍵字從小到大排列(正序)關(guān)鍵字比較次數(shù):記錄移動次數(shù):2(n-1)若待排序記錄按關(guān)鍵字從大到小排列(逆序)關(guān)鍵字比較次數(shù):記錄移動次數(shù):若待排序記錄是隨機的,取平均值關(guān)鍵字比較次數(shù):記錄移動次數(shù):T(n)=O(n2)空間復(fù)雜度: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)算法描述算法評價比較的次數(shù)大大減少,全部元素比較次數(shù)僅為O(nlog2n)。雖然比較次數(shù)大大減少,可惜移動次數(shù)并未減少,所以排序效率仍為O(n2)時間復(fù)雜度:T(n)=O(n2)空間復(fù)雜度:S(n)=O(1)希爾排序(縮小增量法)排序過程:先取一個正整數(shù)d1<n,把所有相隔d1的記錄放一組,組內(nèi)進行直接插入排序;然后取d2<d1,重復(fù)上述分組和排序操作;直至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希爾排序特點子序列的構(gòu)成不是簡單的“逐段分割”,而是將相隔某個增量的記錄組成一個子序列希爾排序可提高排序速度,因為分組后n值減小,n2更小,而T(n)=O(n2),所以T(n)從總體上看是減小了關(guān)鍵字較小的記錄跳躍式前移,在進行最后一趟增量為1的插入排序時,序列已基本有序增量序列取法無除1以外的公因子最后一個增量值必須為12交換排序冒泡排序排序過程將第一個記錄的關(guān)鍵字與第二個記錄的關(guān)鍵字進行比較,若為逆序r[1].key>r[2].key,則交換;然后比較第二個記錄與第三個記錄;依次類推,直至第n-1個記錄和第n個記錄比較為止——第一趟冒泡排序,結(jié)果關(guān)鍵字最大的記錄被安置在最后一個記錄上對前n-1個記錄進行第二趟冒泡排序,結(jié)果使關(guān)鍵字次大的記錄被安置在第n-1個記錄位置重復(fù)上述過程,直到“在一趟排序過程中沒有進行過交換記錄的操作”為止[初態(tài)]:4682405267312173i=1:4640526731217382i=2:4046523121677382i=3:4046312152677382i=4:4031214652677382i=5:3121404652677382i=6:2131404652677382i=7:2131404652677382算法描述算法評價時間復(fù)雜度最好情況(正序)比較次數(shù):n-1移動次數(shù):0最壞情況(逆序)比較次數(shù):移動次數(shù):空間復(fù)雜度:S(n)=O(1)T(n)=O(n2)快速排序基本思想:通過一趟排序,將待排序記錄分割成獨立的兩部分,其中一部分記錄的關(guān)鍵字均比另一部分記錄的關(guān)鍵字小,則可分別對這兩部分記錄進行排序,以達到整個序列有序排序過程:對r[s……t]中記錄進行一趟快速排序,附設(shè)兩個指針i和j,設(shè)樞軸記錄rp=r[s],x=rp.key初始時令i=s,j=t首先從j所指位置向前搜索第一個關(guān)鍵字小于x的記錄,并和rp交換再從i所指位置起向后搜索,找到第一個關(guān)鍵字大于x的記錄,和rp交換重復(fù)上述兩步,直至i==j為止再分別對兩個子序列進行快速排序,直到每個子序列只含有一個記錄為止例初始關(guān)鍵字:4938659776132750ijxji完成一趟排序:(273813)49(76976550)分別進行快速排序:(13)27(38)49(5065)76(97)快速排序結(jié)束:13273849

溫馨提示

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

最新文檔

評論

0/150

提交評論