基數排序 佇列實現

2021-06-27 16:53:55 字數 1426 閱讀 1644

基數排序是一種不需要比較就能實現排序的演算法思維,主要步驟為分配和收集的過程,重複這個過程於最大數的位數後,排序結束。

以下是完全以佇列模擬桶的分配收集過程。

標頭檔案(單鏈表部分):

typedef int elemtype;

typedef struct lnode

lnode,*linklist;

int initlist_link(linklist *head) //初始化函式

int listempty_link(linklist head) //判空函式

int listlength_link(linklist head) //求長度函式

return len;

}int listget_link(linklist head, int i, elemtype *x) //取單鏈表中的某乙個元素

if(j!=i)

*x=p->data;

return 1;

}int listinsert_link(linklist head,int i,elemtype e) //在任意位置進行插入

if(count>i-1||null==p)

return -1;

q=(lnode *)malloc(sizeof(lnode));

if(null==q)

return -2;

q->data=e;

q->next=p->next;

p->next=q;

return 0;

}標頭檔案(佇列)部分:

#define max 100

typedef enum statetype;

typedef struct

csqqueue;

int initqueue_csq(csqqueue *q) //順序迴圈佇列---課本**

int queueempty_csq(csqqueue q)

int queuefull_csq(csqqueue q)

int queuelength_csq(csqqueue q)

int enqueue_csq(csqqueue *q,elemtype e)

int dequeue_csq(csqqueue *q,elemtype *e)

標頭檔案(桶排)部分:

typedef int keytype;

elemtype maxlist_link(linklist head)

key=num(maxlist_link(list)); //獲得最大數的位數以確定分配收集的次數

int flag=1;

for(i=1;flag<=key;i++)

printf("基數排序後,該組資料依次為:");

for(i=0;i

c 實現基數排序

以下介紹內容 百科 基數排序的方式可以採用lsd least significant digital 或msd most significant digital lsd的排序方式由鍵值的最右邊開始,而msd則相反,由鍵值的最左邊開始。以lsd為例,假設原來有一串數值如下所示 73,22,93,43,...

python 實現基數排序

由桶排序改進來的 從最低位到最高位依次桶排序 最後輸出最後排好的列表 def radixsort list,d for k in range d d輪排序 每一輪生成10個列表 s for i in range 10 因為每一位數字都是0 9,故建立10個桶 for i in list 按第k位放入...

Java實現基數排序

在眾多的排序方法中基數排序比較特殊,它是一種不需要進行關鍵字之間比較的排序方法,利用多關鍵字的劃分,逐漸將待排序列排好序。舉個例子 現在有陣列 278,109,63,930,589,184,505,269,8,83 第一次根據各位數將陣列劃分為10個佇列 當然其中的某些佇列可能不含有元素 0 930...