資料結構實踐 敗者樹歸併模擬

2021-09-23 18:02:20 字數 1225 閱讀 7179

本文是針對[資料結構基礎系列(10):外部排序]中的實踐專案。

【專案】敗者樹歸併模擬

編寫程式,模擬改者樹實現5路歸併演算法的過程。

設有5個檔案,其中的記錄的關鍵字如下:

f0: f1: f2:f3: f4:

要求將其歸併為乙個有序段並輸出。

假設這些輸入檔案資料儲存在記憶體中,輸出結果也不必輸出到檔案,而是在螢幕上輸出即可。

參考解答

#include 

#define maxsize 20 //每個檔案中最多記錄

#define k 5 //5路平衡歸併

#define maxkey 32767 //最大關鍵字值∞

#define minkey -32768 //最小關鍵字值-∞

typedef

int infotype;

typedef

int keytype;

typedef

struct

//記錄型別

rectype;

typedef

struct

filetype; //檔案型別

typedef

int losertree[k]; //敗者樹是完全二叉樹且不含葉子

rectype b[k]; //b中存放各段中取出的當前記錄

filetype f[k]; //存放檔案記錄的陣列

void initial()

void input(int i,int &key) //從f[i]檔案中讀乙個記錄到b[i]中

void output(int q) //輸出f[q]中的當前記錄

void adjust(losertree ls,int s)

//沿從葉子節點b[s]到根節點ls[0]的路徑調整敗者樹

t=t/2;

}ls[0]=s;

}void display(losertree ls) //輸出敗者樹

void createlosertree(losertree ls) //建立敗者樹

void k_merge(losertree ls) //利用敗者樹ls將進行k路歸併到輸出

}int main()

第16周外部排序之 專案2 敗者樹歸併模擬

編寫程式,模擬改者樹實現5路歸併演算法的過程。設有5個檔案,其中的記錄的關鍵字如下 f0 f1 f2 f3 f4 要求將其歸併為乙個有序段並輸出。假設這些輸入檔案資料儲存在記憶體中,輸出結果也不必輸出到檔案,而是在螢幕上輸出即可。include define maxsize 20 每個檔案中最多記錄...

資料結構 歸併演算法

源 獲取 歸併排序的基本思想,先將序列一分為二,獲得左右兩個序列,再將子串行一分為二,以此類推得到最小的序列,因此歸併排序也需要遞迴思想。分解流程 每次取一半,分為兩個子串行 合併流程 將子串行有序排列後合併起來 合併子串行,就進行排序,此時需要引入乙個臨時陣列 左側陣列的起始指標 int righ...

資料結構 歸併樹 區間第k大

求區間第k大有很多種方法比如可持久化線段樹,分桶法和平方分割 當然,我們還可以用歸併樹 請原諒蒟蒻才曉得歸併樹,寫的不好 我們把數列用線段樹維護起來。線段樹的每個節點都儲存了對應區間排好序後的結果。在這之前我接觸到的線段樹上面儲存的都是數值,而這次有所不同,每個節點儲存的是數列。如圖 畫的醜,勿噴 ...