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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

荷兰国旗问题(利用基数排序思想实现)

發(fā)布時(shí)間:2023/12/18 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 荷兰国旗问题(利用基数排序思想实现) 小編覺(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。