日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构-排序-分配类排序-知识点总结归纳3

發布時間:2023/12/4 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构-排序-分配类排序-知识点总结归纳3 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

分配類排序:核心是分配和收集,利用關鍵字的優先級進行排序的思想?

高位優先排序:比如橋牌,先比較花色在比較面值;比如學號,比較級,院,班,號;

低位優先排序: 鏈式基數排序


思想:基于"分配"和"收集"的操作, 將單關鍵字轉化為多關鍵字排序
將鏈表作為存儲結構, 待排序記錄以指針相連,構成鏈表;
分配:按照關鍵字取值分配記錄到鏈隊列相應隊列中,每個隊列關鍵字取值相同
收集:按照關鍵字大小,從小到大,將隊列首尾相接連接成一個鏈表;
重復上述步驟..

定義:

?

//待排序記錄結點 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;//返回頭結點 } #define N 10 //分配算法,對三位數的記錄序列按照關鍵字低位排序分配 void dispatch(TNode *ph, TPointer *Q, int d){ //ph存記錄, Q隊列:存指針,d根據關鍵字到那一趟取值不同 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;//根據關鍵字分配到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為頭結點,最終可以傳出去for(i = 0; !Q[i].front; i++);//找出第一個隊列中非空結點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]內部的結點是連接好的 }}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); }

?

總結

以上是生活随笔為你收集整理的数据结构-排序-分配类排序-知识点总结归纳3的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。