/**
* 實驗題目:
* 實現英文單詞按詞典序排列的基數排序演算法
* 實驗目的:
* 掌握基數排序演算法及其應用
* 實驗內容:
* 編寫程式,採用基數排序方法將一組英文單詞按詞典序排列。假設
* 單詞均由小寫字母或空格構成,最長的單詞有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...