/* c1.h (程式名) */
#include#include#include/* malloc()等 */
#include/* int_max等 */
#include/* eof(=^z或f6),null */
#include/* atoi() */
#include/* eof() */
#include/* floor(),ceil(),abs() */
#include/* exit() */
/* 函式結果狀態** */
#define true 1
#define false 0
#define ok 1
#define error 0
#define infeasible -1
/* #define overflow -2 因為在math.h中已定義overflow的值為3,故去掉此行 */
typedef int status; /* status是函式的型別,其值是函式結果狀態**,如ok等 */
typedef int boolean; /* boolean是布林型別,其值是true或false */
typedef int elemtype;
/* alg10-11.c 鏈式基數排序 */
typedef int infotype; /* 定義其它資料項的型別 */
typedef int keytype; /* 定義redtype型別的關鍵字為整型 */
typedef struct
redtype; /* 記錄型別(同c10-1.h) */
typedef char keystype; /* 定義關鍵字型別為字元型 */
#define max_num_of_key 8 /* 關鍵字項數的最大值 */
#define radix 10 /* 關鍵字基數,此時是十進位制整數的基數 */
#define max_space 1000
typedef struct
slcell; /* 靜態鍊錶的結點型別 */
typedef struct
sllist; /* 靜態鍊錶型別 */
typedef int arrtype[radix]; /* 指標陣列型別 */
#include "linkradix.h"
void initlist(sllist *l, redtype d, int n)
}void radixsort(sllist *l)
}void print(sllist l)
}void sort(sllist l, int adr) /* 改此句(型別) */
}void rearrange(sllist *l, int adr) /* 改此句(型別) */
(*l).r[j] = (*l).r[0];
adr[j] = j; }}
#define n 10
void main()
, , , , , , , , , };
sllist l;
int *adr;
initlist(&l, d, n);
printf("排序前(next域還沒賦值):\n");
print(l);
radixsort(&l);
printf("排序後(靜態鍊錶):\n");
print(l);
adr = (int*)malloc((l.recnum)*sizeof(int));
sort(l, adr);
rearrange(&l, adr);
printf("排序後(重排記錄):\n");
print(l);
}
鏈式基數排序
將乙個關鍵字,如278,分為三個關鍵字 2 7 8 把待排元素按某一位從低到高新增到相應的f e中,其實f和e只是指向頭尾兩個元素,鍊錶的連線關係實際上是通過修改r的next指標實現的。created by dgm on 19 4 23.include define maxnum 10000 def...
資料結構 內部排序 鏈式基數排序
沒做這個演算法之前覺得靜態鍊錶沒什麼用,寫了這個演算法才發現原來靜態鍊錶是如此的巧妙,才發現之前的看法是多麼的淺薄無知,看來以後還要更虛心了,嘿嘿.基數排序,關鍵是兩個過程,分配和 分配是按關鍵字順序將記錄進行分類為,是將分配過程中順序打亂的記錄重新鏈結成靜態鍊錶。這樣從按一定順序對關鍵字進行分配和...
排序 基數排序
基數排序 radix sort 是屬於 分配式排序 distribution sort 基數排序法又稱 桶子法 bucket sort 或bin sort,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些 桶 中,藉以達到排序的作用。排序思想 首先按照資料的最低位 個位 將資料分配到0 9...