荷蘭國旗問題(利用基數排序思想實現)

2021-10-12 04:48:14 字數 711 閱讀 9619

荷蘭國旗問題:設有乙個僅由紅、白、藍3種顏色的條塊組成的條塊序列。請編寫乙個時間複雜度為o(n)的演算法,使得這些條塊按紅、白、藍的順序排好,即排成荷蘭國旗圖案。

利用鏈式基數排序,將紅、白、藍3種顏色分配到3個鍊錶上,然後對鍊錶進行收集。

typedef

enum

color;

typedef

struct listnodenode,

*linklist;

void

flagadjust

(color a,

int n)

// 將三種顏色組成的序列重排為按照紅、白、藍的順序排列

for(

int i=

0; i)else

if(a[i]

==white)

else

}//分配

node *q = list[red]

->next;

while

(q!=

null

) q = list[white]

->next;

while

(q!=

null

) q = list[blue]

->next;

while

(q!=

null

)//收集

}

荷蘭國旗問題(快速排序初步思想)

給定乙個整數陣列,給定乙個值k,這個值在原陣列中一定存在,要求把陣列中小於k的元素放到陣列的左邊,大於k的元素放到陣列的右邊,等於k的元素放到陣列的中間,最終返回乙個整數陣列。例如 給定陣列 2,3,1,4,7,6,5,10,9 給定乙個值9,那麼經過處理後結果陣列是 2,3,1 4,7,6,5,9...

荷蘭國旗問題解題思想

關於荷蘭國旗排序問題可以簡化理解將乙個陣列中的資料排序,比如給定乙個buffer內部元素有n個0,1,2,buffer內部是無序的,如果要求通過一趟掃瞄,並且不能利用額外的空間,進行排序如何解決。這種問題最直觀的思想就是採用多指標策略,元素起始位置乙個移動索引a,元素的尾部乙個移動索引b,然後乙個移...

荷蘭國旗問題 快速排序

目錄 一.荷蘭國旗 二.快速排序 亂序快排優化版 三.應用傳統快排求中位數 1.題目描述 給定乙個陣列arr和乙個數num,請把小於num的數放在陣列的左邊,等於num的數放在陣列的中間,大於num的數放在陣列的右邊。要求額外空間複雜度為o 1 時間複雜度為o n 2.分析思路 初始化less 1,...