基數排序是一種不需要比較就能實現排序的演算法思維,主要步驟為分配和收集的過程,重複這個過程於最大數的位數後,排序結束。
以下是完全以佇列模擬桶的分配收集過程。
標頭檔案(單鏈表部分):
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...