荷兰国旗问题(利用基数排序思想实现)
生活随笔
收集整理的這篇文章主要介紹了
荷兰国旗问题(利用基数排序思想实现)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
荷蘭國(guó)旗問(wèn)題:設(shè)有一個(gè)僅由紅、白、藍(lán)3種顏色的條塊組成的條塊序列。請(qǐng)編寫(xiě)一個(gè)時(shí)間復(fù)雜度為O(n)的算法,使得這些條塊按紅、白、藍(lán)的順序排好,即排成荷蘭國(guó)旗圖案。
算法設(shè)計(jì)
利用鏈?zhǔn)交鶖?shù)排序,將紅、白、藍(lán)3種顏色分配到3個(gè)鏈表上,然后對(duì)鏈表進(jìn)行收集。
具體實(shí)現(xiàn)
typedef enum{Red,White,Blue}Color; typedef struct ListNode{Color color;struct ListNode *next; }Node,*LinkList; void FlagAdjust(Color a[],int n) // 將三種顏色組成的序列重排為按照紅、白、藍(lán)的順序排列 {LinkList list[3]; //創(chuàng)建3個(gè)鏈表,分別儲(chǔ)存紅、白、藍(lán)色 int count = 0;for(int i=0; i<3; i++){ list[i] = (Node*)malloc(sizeof(Node));list[i]->next = NULL; //頭結(jié)點(diǎn)指針域指向NULL }for(int i=0; i<n; i++){ if(a[i]==Red){Node *p = (Node*)malloc(sizeof(Node));p->color = Red;p->next = list[Red]->next;list[Red]->next = p;} else if(a[i]==White){Node *p = (Node*)malloc(sizeof(Node));p->color = White;p->next = list[White]->next;list[White]->next = p;} else{Node *p = (Node*)malloc(sizeof(Node));p->color = Blue;p->next = list[Blue]->next;list[Blue]->next = p;}} //分配 Node *q = list[Red]->next;while(q!=NULL){a[count] = q->color;count++;q = q->next;}q = list[White]->next;while(q!=NULL){a[count] = q->color;count++;q = q->next; }q = list[Blue]->next;while(q!=NULL){a[count] = q->color;count++;q = q->next;} //收集 }總結(jié)
以上是生活随笔為你收集整理的荷兰国旗问题(利用基数排序思想实现)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql amoeba 配置_mysq
- 下一篇: 嘉应学院计算机专业毕业好找工作吗,嘉应学