数据结构-排序-分配类排序-知识点总结归纳3
生活随笔
收集整理的這篇文章主要介紹了
数据结构-排序-分配类排序-知识点总结归纳3
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
分配類排序:核心是分配和收集,利用關鍵字的優(yōu)先級進行排序的思想?
高位優(yōu)先排序:比如橋牌,先比較花色在比較面值;比如學號,比較級,院,班,號;
低位優(yōu)先排序: 鏈式基數(shù)排序
思想:基于"分配"和"收集"的操作, 將單關鍵字轉(zhuǎn)化為多關鍵字排序
將鏈表作為存儲結(jié)構(gòu), 待排序記錄以指針相連,構(gòu)成鏈表;
分配:按照關鍵字取值分配記錄到鏈隊列相應隊列中,每個隊列關鍵字取值相同
收集:按照關鍵字大小,從小到大,將隊列首尾相接連接成一個鏈表;
重復上述步驟..
定義:
?
//待排序記錄結(jié)點 typedef struct node{int data;//比如說一個三位數(shù) struct node *next; }TNode;//隊列首尾指針 typedef struct{node *front;node *rear; }TPointer;?
//根據(jù)數(shù)組R[](已經(jīng)存在元素),構(gòu)建帶頭結(jié)點待排序記錄鏈表 TNode *create_list(int R[], int n){TNode *p, *ph;//p為每一個存了記錄的結(jié)點, ph為頭結(jié)點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;//返回頭結(jié)點 } #define N 10 //分配算法,對三位數(shù)的記錄序列按照關鍵字低位排序分配 void dispatch(TNode *ph, TPointer *Q, int d){ //ph存記錄, Q隊列:存指針,d根據(jù)關鍵字到那一趟取值不同 TNode *p = NULL;//作為輔助空間拆分ph int i, idx;//初始化Qfor(i = 0; i < N; i++){Q[i].front = NULL;Q[i].rear = NULL; } p = ph->next;if(p){ph->next = p->next;p->next = NULL;}//第一個記錄被單獨拆到p里面while(p){idx = p->data;for(i = 0; i < d; i++)idx = idx / N;//第一趟排序,d = 0idx = idx % N;//根據(jù)關鍵字分配到Q中if(Q[idx].front = NULL){Q[idx].front = p;Q[idx].rear = p;} else{//尾插法 Q[idx].rear->next = p;Q[idx].rear = p;}p = ph->next;if(p){//拆,直到拆完 ph->next = p->next;p->next = NULL;}} }void collect(TNode *ph, TPointer *Q){TNode *p;int i;//ph為頭結(jié)點,最終可以傳出去for(i = 0; !Q[i].front; i++);//找出第一個隊列中非空結(jié)點ph->next = Q[i].front;p = Q[i].rear;i++;for(; i < N; i++){if(Q[i].front){p->next = Q[i].front;p = Q[i].rear;//注意的是Q[i]內(nèi)部的結(jié)點是連接好的 }}p->next = NULL; } void list_sort(int *R, int n){int i;TNode *ph, *p;TPointer Q[N];int m = max(R, n);ph = create_list(R, n);for(i = 0; m; i++, m /= N){dispatch(ph, Q, i);collect(ph, Q);}for(i = 0, p = ph->next; p; p = p->next){R[i] = p->data;}free(ph); }?
總結(jié)
以上是生活随笔為你收集整理的数据结构-排序-分配类排序-知识点总结归纳3的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。