實現英文單詞按詞典序排列的基數排序演算法

2021-09-11 01:52:16 字數 2135 閱讀 5038

/**

*    實驗題目:

*        實現英文單詞按詞典序排列的基數排序演算法

*    實驗目的:

*        掌握基數排序演算法及其應用

*    實驗內容:

*        編寫程式,採用基數排序方法將一組英文單詞按詞典序排列。假設

*    單詞均由小寫字母或空格構成,最長的單詞有max_len個字母,用相關

*    資料進行測試,並輸出各趟的排序結果。

*/#include

#include

#include

#define max_len 9                               //  單詞的最大長度

#define radix 27                                //  基數rd為27,分別對應' ','a',...,'z'

typedef char string[max_len + 1];               //  定義string為字元陣列型別

typedef struct node

link_node;                                     //  單鏈表結點型別

/*------------------輸出單詞------------------------*/

static void disp_word(string r, int n)

printf("\n");

}/*------------------對單詞進行預處理,用空格填充尾部至max_len長------------------------*/

static void pre_process(string r, int n)

r[i][j] = '\0';}}

}/*---------------恢復處理,刪除預處理時填充的尾部空格--------------------*/

static void end_process(string r, int n)

}/*--------------按關鍵字的第j個分量進行分配,進入此過程時各佇列一定為空--------------*/

static void distribute(string r, link_node *head, link_node *tail, int j, int n)

else}}

/*--------------依次將各非空佇列中的結點收集起來,並釋放各非空佇列中的所有結點--------------*/

static void collect(string r, link_node *head)

strcpy(r[k++], pre->word);

free(pre);}}

}/*------------------對r[0...n-1]進行基數排序----------------*/

static void radix_sort(string r, int n)

}int main(void)

;printf("排序前:\n");

disp_word(r, n);

pre_process(r, n);

printf("預處理後:\n");

disp_word(r, n);

radix_sort(r, n);

printf("排序結果:\n");

disp_word(r, n);

end_process(r, n);

printf("最終結果:\n");

disp_word(r, n);

return 0;

}測試結果:

排序前:

[while] [if] [if else] [do while] [for] [case]

預處理後:

[while    ] [if       ] [if else  ] [do while ] [for      ] [case     ]

排序結果:

[case     ] [do while ] [for      ] [if       ] [if else  ] [while    ]

最終結果:

[case ] [do while ] [for ] [if ] [if else ] [while ]

第十六周 英文單詞的基數排序

include include include define maxlen 9 單詞的最大長度 define radix 27 基數rd為27,分別對應 a z typedef char string maxlen 1 定義string為字元陣列型別 typedef struct node link...

第十六周 英文單詞的基數排序

問題及 煙台大學計算機與控制工程學院 檔名稱 mian.cpp 作 者 劉磊 完成日期 2015年12月18日 版 本 號 v1.0 問題描述 基數排序 輸入描述 無 程式輸出 無 include include include define maxlen 9 單詞的最大長度 define radi...

第十六周 英文單詞的基數排序

作 者 孫子策 完成日期 2016.12.15 問題描述 設計乙個基數排序的演算法,將一組英文單詞,按字典順序排列。假設單詞均由小寫字母或空格構成,最長的單詞有maxlen個字母。include include include define maxlen 9 單詞的最大長度 define radix...