分配类排序:核心是分配和收集,利用关键字的优先级进行排序的思想
高位优先排序:比如桥牌,先比较花色在比较面值;比如学号,比较级,院,班,号;
低位优先排序: 链式基数排序
思想:基于"分配"和"收集"的操作, 将单关键字转化为多关键字排序
将链表作为存储结构, 待排序记录以指针相连,构成链表;
分配:按照关键字取值分配记录到链队列相应队列中,每个队列关键字取值相同
收集:按照关键字大小,从小到大,将队列首尾相接连接成一个链表;
重复上述步骤..
定义:
//待排序记录结点
typedef struct node{
int data;//比如说一个三位数
struct node *next;
}TNode;
//队列首尾指针
typedef struct{
node *front;
node *rear;
}TPointer;
//根据数组R[](已经存在元素),构建带头结点待排序记录链表
TNode *create_list(int R[], int n){
TNode *p, *ph;
//p为每一个存了记录的结点, ph为头结点
ph = (TNode *)malloc(sizeof(TNode));
if(!ph) return NULL;
ph->next = NULL;
int i;
for(i = 0; i < n; i++){
p = (TNode *)malloc(sizeof(TNode));
if(!p) return NULL;
p->data = R[i];
//头插法插入
p->next = ph->next;
ph->next = p;
}
return ph;//返回头结点
}