c語言資料結構基數排序演算法

2021-09-24 03:47:20 字數 1170 閱讀 1834

/*

*基數排序演算法的大概思想:

*首先建立乙個鍊錶用於儲存待排序陣列 arraynode鍊錶

*建立乙個儲存頭結點的陣列 用來儲存分配好的節點 0-9

*進行分配 即給group陣列進行賦值資料

*首先進行分配的是 次關鍵字的操作 然後進行主關鍵字的操作(最高位)

*分別對分配好的陣列進行收集 將頭節點的指標返回值傳回

*最後進行將主關鍵字的收集鍊錶的頭指標進行傳回之後

*將鍊錶的所有節點移動到原始陣列a中

*輸出陣列中的資料

*/

#include#include#define radix 10//基數的數目

typedef struct node

node;//鍊錶節點的結構體

void arrange(node*arraynode,node *group,int level);//鍊錶節點分組函式

void radix_sort(int a,int n);//基數排序函式

node* collect(node*group);//對分組的資料進行收集 返回鍊錶的頭指標

int resolve(int key,int level);//對關鍵字進行 劃分為主關鍵字 和次關鍵字

void main()

arraynode=collect(group);

}pnode=arraynode;

j=0;//再次初始化迴圈變數

while(pnode)

free(arraynode);//釋放鍊錶的空間

}int resolve(int key,int level)//對關鍵字進行 劃分為主關鍵字 和次關鍵字

return key;

}void arrange(node*arraynode,node *group,int level)//鍊錶節點分組函式

else

postnode->next=arraynode;

arraynode->next=null;

}}node* collect(node*group)//對分組的資料進行收集

while(postnode->next)

group[i]=null;//釋放group陣列的空間

}return phead;//返回鍊錶

}

資料結構 C語言實現排序演算法 基數排序

基數排序 借助多關鍵字排序的思想對單邏輯關鍵字進行排序的方法。演算法實現的思想如圖 演算法的實現 先統計數字的位數,記為n 每次陣列值除10 n得到的結果,就將該數值放在該結果上 對所有資料做同樣的操作,然後n 1 讀資料放進陣列中,從小往大讀,該位置若有多個資料,讀取的時候按照先進先出的原則 重複...

資料結構與演算法 基數排序

基數排序是一種多關鍵字排序。以撲克牌排序為例,每張撲克牌有兩個 關鍵碼 花色和面值,花色的權重大於面值,如紅桃a小於黑桃2。通常有最高位優先msd most significant digit first 和最低位優先lsd least significant digit first 兩種實現方式。...

資料結構與演算法 基數排序

基數排序是一種非比較型整數排序演算法,其原理是將資料按位數切割成不同的數字,然後按每個位數分別比較。假設說,我們要對 100 萬個手機號碼進行排序,應該選擇什麼排序演算法呢?排的快的有歸併 快排時間複雜度是 o n log n 計數排序和桶排序雖然更快一些,但是手機號碼位數是11位,那得需要多少桶?...