




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、數(shù)據(jù)結(jié)構(gòu)與算法一一排序相關(guān)區(qū)間排序 ShortSort (Oracle) TopK算法(Knuth) TopMN算法(P.Linux)數(shù)據(jù)結(jié)構(gòu)與算法排序相關(guān)冒泡排序它重復(fù)地訪問要排序的數(shù)列,一次比較兩 個元素,如果他們的順序錯誤就把他們交 換過來。訪問數(shù)列的工作是重復(fù)地進(jìn)行直 到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng) 排序完成。 FOR I = ITO N-l DO FOR J = 1+1 TO N DO IF (AiAj) THEN swap(Ai,Aj); END FOR END FOR數(shù)據(jù)結(jié)構(gòu)與算法排序相關(guān)冒泡排序數(shù)據(jù)結(jié)構(gòu):數(shù)組最差時(shí)間復(fù)雜度:O(n2)最優(yōu)時(shí)間復(fù)雜度:O何一一因?yàn)榭梢酝ㄟ^判
2、 斷一輪比較后是否有交換來判定排序是否 完成平均時(shí)間復(fù)雜度:O(n2)最差空間復(fù)雜度:O(n)total, 0(1) auxiliary數(shù)據(jù)結(jié)構(gòu)與算法排序相關(guān) 冒泡排序數(shù)據(jù)結(jié)構(gòu)與算法排序相關(guān)選擇排序首先在未排序序列中找到最小元素,存放 到排序序列的起始位置,然后,再從剩余 未排序元素中繼續(xù)尋找最小元素,然后放 到排序序列末尾。以此類推,直到所有元 素均排序完畢。 FOR I = 1 TO N DO Ai = FindMin(bN); END FOR數(shù)據(jù)結(jié)構(gòu)與算法排序相關(guān)選擇排序數(shù)據(jù)結(jié)構(gòu):數(shù)組最差時(shí)間復(fù)雜度:O(n2)最優(yōu)時(shí)間復(fù)雜度:O(n2)平均時(shí)間復(fù)雜度:O(n2)最差空間復(fù)雜度:OG丿to
3、tal, Oauxiliary數(shù)據(jù)結(jié)構(gòu)與算法排序相關(guān)選擇排序數(shù)據(jù)結(jié)構(gòu)與算法排序相關(guān)插入排序它的工作原理是通過構(gòu)建有序序列,對于 未排序數(shù)據(jù),在已排序序列中從后向前掃 描,找到相應(yīng)位置并插入。 FOR I = 2 TO N DO J = FindPos(lJ-l,x); 在有序的序列中找X的位置 MoveNext(JJ); /將需要占用位置的元素后移 AJ = x; /空出的位置放入X END FOR數(shù)據(jù)結(jié)構(gòu)與算法排序相關(guān)插入排序數(shù)據(jù)結(jié)構(gòu):數(shù)組最差時(shí)間復(fù)雜度:O(n2)最優(yōu)時(shí)間復(fù)雜度:O(n2)平均時(shí)間復(fù)雜度:O(n2)最差空間復(fù)雜度:OG丿total, Oauxiliary數(shù)據(jù)結(jié)構(gòu)與算法排序相
4、關(guān)快速排序從數(shù)列中挑出一個元素,稱為”基準(zhǔn)”,重 新排序數(shù)列,所有元素比基準(zhǔn)值小的擺放 在基準(zhǔn)前面,所有元素比基準(zhǔn)值大的擺在 基準(zhǔn)的后面(相同的數(shù)可以到任一邊)。 這個稱為分割操作。遞歸地(recursive)把 小于基準(zhǔn)值元素的子數(shù)列和大于基準(zhǔn)值元 素的子數(shù)列排序。數(shù)據(jù)結(jié)構(gòu)與算法排序相關(guān)快速排序數(shù)據(jù)結(jié)構(gòu):Varies最差時(shí)間復(fù)雜度:0(n2)最優(yōu)時(shí)間復(fù)雜度:O(nlogn)平均時(shí)間復(fù)雜度:0(nlogn)comparisons最差空間復(fù)雜度根據(jù)實(shí)現(xiàn)的方式不同而不 同數(shù)據(jù)結(jié)構(gòu)與算法排序相關(guān)快速排序數(shù)據(jù)結(jié)構(gòu)與算法排序相關(guān)歸并排序元素首先分組,每組元素進(jìn)行比較。然后 每組元素看成一個元素,再分組比
5、較。遞 歸此過程直到只有一組元素的時(shí)候排序完 成。 void merge_sort(int arrf, int first, int last) intmid = 0; if(firstlast) mid = (first+last)/2; /分成兩組分別排序 merge_sort(airay,first, mid);/對一個分組排序 merge_sort(array/ mid+ljast);/X個分組排用 mergefarrafirstmidjast);/ 歸并兩組排序 數(shù)據(jù)結(jié)構(gòu)與算法排序相關(guān)歸并排序數(shù)據(jù)結(jié)構(gòu):數(shù)組最差時(shí)間復(fù)雜度:O(nlogn)最優(yōu)時(shí)間復(fù)雜度:0(n)平均時(shí)間復(fù)雜度:0(n
6、logn)最差空間復(fù)雜度:0(n)數(shù)據(jù)結(jié)構(gòu)與算法排序相關(guān)歸并排序數(shù)據(jù)結(jié)構(gòu)與算法排序相關(guān)堆排序堆積樹是一個近似完全二叉樹的結(jié)構(gòu),并 同吋滿足堆的屬性:即子結(jié)點(diǎn)的鍵值或索 引總是小于(或者大于)它的父結(jié)點(diǎn)。 WHILE (堆不為空) Ai+ = GetRootFromHeap; / 取出堆根 ShiftHeap;/ 調(diào)堆 數(shù)據(jù)結(jié)構(gòu)與算法排序相關(guān)樹排序首先按照搜索二叉樹對數(shù)據(jù)建樹,然后中序遍歷搜索樹,即可得到有序數(shù)列。普通二叉搜索樹,AVL平衡二叉樹等。數(shù)據(jù)結(jié)構(gòu)與算法排序相關(guān)樹排序數(shù)據(jù)結(jié)構(gòu):數(shù)組最差時(shí)間復(fù)雜度:平衡樹O(nlogn)非平衡樹O(nA2)最優(yōu)時(shí)間復(fù)雜度:O(nlogn)平均時(shí)間復(fù)雜度:
7、G(nlogn)最差空間復(fù)雜度:O(n) total, 0(1) auxiliary數(shù)據(jù)結(jié)構(gòu)與算法排序相關(guān)桶排序不基于比較,為每個元素設(shè)一個計(jì)數(shù)器, 記錄每個元素出現(xiàn)多少次。 FOR I = 1 TO N DO CAi+; /將兀素丟入相中 END FOR FOR I = 1 TO MAX DO 輸出Ci個I; /講元素依次倒岀桶 END FOR數(shù)據(jù)結(jié)構(gòu)與算法排序相關(guān)桶排序數(shù)據(jù)結(jié)構(gòu):數(shù)組最差時(shí)間復(fù)雜度:0(n)最優(yōu)時(shí)間復(fù)雜度:0(n)平均時(shí)間復(fù)雜度:0(n)最差空間復(fù)雜度:O(MAX)total數(shù)據(jù)結(jié)構(gòu)與算法排序相關(guān)基數(shù)排序?qū)⑺写容^數(shù)值(正整數(shù))統(tǒng)一為同樣的數(shù)位長度 ,數(shù)位較短的數(shù)前面補(bǔ)零
8、.然后,從最低位開始,依 次進(jìn)行一次排序這樣從最低位排序一直到最高位 排序完成以后,數(shù)列就變成一個有序序列.基數(shù)排序的方式町以采用LSD (Least significant digital)或MSD (Most significant digital) , LSD的 排序方式由鍵值的最右邊開始,而MSD則相反, 由鍵值的最左邊開始。數(shù)據(jù)結(jié)構(gòu)與算法排序相關(guān)希爾排序?qū)τ衝個元素的可比較資料,先取一個小于n的整 數(shù)dl作為第一個增量,把文件的全部記錄分成dl 個組。所有距離為dl的倍數(shù)的記錄放在同一個組 中。先在各組內(nèi)進(jìn)行直接插入排序;然后,取第 二個增量d2vdl重復(fù)上述的分紐和排序,直至所取
9、的增量dt=l(dtdt-l.d2 H0) H0 = Ai; /替換堆根 ShiftHeap(); 調(diào)堆 END FOR數(shù)據(jù)結(jié)構(gòu)與算法排序相關(guān)ShortSort數(shù)據(jù)結(jié)構(gòu):數(shù)組最差時(shí)間復(fù)雜度:O(n+nlogk)最優(yōu)時(shí)間復(fù)雜度:O(n+klogk)平均時(shí)間復(fù)雜度:G(n+xlogn) k x K) 如果左堆元素多于K個則繼續(xù)二分 LeftGroupl-now = Split(LeftGroupnow); Sort(LeftGroupl-now ); /在左堆中排序數(shù)據(jù)結(jié)構(gòu)與算法排序相關(guān)TopK數(shù)據(jù)結(jié)構(gòu):數(shù)組最差時(shí)間復(fù)雜度:O(n+k)log(n/k)+k/ogk)最優(yōu)時(shí)間復(fù)雜度:O(n+k)log(n/k)+k/ogk)平均時(shí)間復(fù)雜度:O(n+k)log(n/k)+k/ogk)最差空間復(fù)雜度根據(jù)實(shí)現(xiàn)的方式不同而不 同優(yōu)勢:利用隨機(jī)的基準(zhǔn),可以有效避免全排序數(shù)據(jù)結(jié)構(gòu)與算法一一排序相關(guān)TopMN排序M.N位的元素,則需要拋棄l.M-l,N+l.MAX兩部分的元素。利用二分思想,每次對元素分成 左大右小兩堆,分別處理。左堆繼續(xù)二分分出前 M1個元素,右堆繼續(xù)二分分出N+1個之后的元素 o排除無效元素后的元素集,再進(jìn)行排序。 H = Split(A); /元素分成兩堆利用TopK的思想將前個元素排到一組。利用TopK的思想將N+1位后的元素排到一組。 Sort(A,M,N).備注:可
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國旅游用鋁合金椅市場分析及競爭策略研究報(bào)告
- 戀愛觀心理基礎(chǔ)解析
- 怎樣提升少年的邏輯推理能力
- 質(zhì)檢車間主任年終工作總結(jié)
- 小學(xué)生急救技能入門
- 孩子語言表達(dá)問題解決方案
- 汽車維修行業(yè)客戶分析
- 孩子自學(xué)難?專家支招
- 教學(xué)進(jìn)度安排表計(jì)劃
- 職業(yè)生涯規(guī)劃教育實(shí)施計(jì)劃
- 胸椎結(jié)核護(hù)理查房課件
- 初中英語八年級下冊Unit 4 Why don't you talk to your parents Section B(2a-2e)課件
- 國家開放大學(xué)《農(nóng)業(yè)推廣》形考任務(wù)1-3參考答案
- 基于flexsim的煉鋼-連鑄仿真模型
- 星環(huán)大數(shù)據(jù)方案介紹課件
- 二級醫(yī)院設(shè)備配置標(biāo)準(zhǔn)
- 稻田養(yǎng)殖小龍蝦項(xiàng)目計(jì)劃書
- 2022-2023學(xué)年廣東省深圳市龍崗區(qū)春蕾小學(xué)數(shù)學(xué)五年級第二學(xué)期期末聯(lián)考模擬試題含解析
- 牙齒發(fā)育異常 畸形根面溝
- 2023年全國職業(yè)院校技能大賽賽項(xiàng)承辦校申報(bào)書
- 護(hù)士讀書分享《喚醒護(hù)理》
評論
0/150
提交評論