演算法習作 荷蘭國旗問題

2021-09-06 07:30:40 字數 809 閱讀 4595

出處:

1.問題描述:

我們將亂序的紅白藍三色小球排列成有序的紅白藍三色的同顏色在一起的小球組。這個問題之所以叫荷蘭國旗,是因為我們可以將紅白藍三色小球想象成條狀物,有序排列後正好組成荷蘭國旗。

2.問題分析:

這個問題我們可以將這個問題視為乙個陣列排序問題,這個陣列分為前部,中部和後部三個部分,每乙個元素(紅白藍分別對應0、1、2)必屬於其中之一。由於紅、白、藍三色小球數量並不一定相同,所以這個三個區域不一定是等分的,也就是說如果我們將整個區域放在[0,1]的區域裡,由於三色小球之間數量的比不同(此處假設1:2:2),可能前部為[0,0.2),中部為[0.2,0.6),後部為[0.6,1]。我們的思路如下:將前部和後部各排在陣列的前邊和後邊,中部自然就排好了。具體的:

設定兩個標誌位begin和end分別指向這個陣列的開始和末尾,然後用乙個標誌位current從頭開始進行遍歷:

1)若遍歷到的位置為0,則說明它一定屬於前部,於是就和begin位置進行交換,然後current向前進,begin也向前進(表示前邊的已經都排好了)。

2)若遍歷到的位置為1,則說明它一定屬於中部,根據總思路,中部的我們都不動,然後current向前進。

3)若遍歷到的位置為2,則說明它一定屬於後部,於是就和end位置進行交換,由於交換完畢後current指向的可能是屬於前部的,若此時current前進則會導致該位置不能被交換到前部,所以此時current不前進。而同1),end向後退1。

3.解決**:

出處:

演算法 荷蘭國旗問題

荷蘭國旗是由紅白藍3種顏色的條紋拼接而成,如下圖所示 假設這樣的條紋有多條,且各種顏色的數量不一,並且隨機組成了乙個新的圖形,新的圖形可能如下圖所示,但是絕非只有這一種情況 需求是 把這些條紋按照顏色排好,紅色的在上半部分,白色的在中間部分,藍色的在下半部分,我們把這類問題稱作荷蘭國旗問題。我們把荷...

演算法之荷蘭國旗問題

問題描述 荷蘭國旗有三橫條塊構成,自上到下的三條顏色依次為紅,白,藍。現有若干由紅,白,藍三種顏色的條塊序列,要將它們重新排列使所有相同顏色的條塊在一起。本問題要求將所有紅色的條塊放在最左邊,所有白色的條塊放在中間,所有藍色的條塊放在最右邊。解決辦法 將三種顏色放入乙個數字中,前部分為紅色,中間部分...

荷蘭國旗演算法

問題 現有紅,白,藍三個不同顏色的小球,亂序排列在一起,請重新排列這些小球,使得紅白藍三色的同顏色的球在一起。問題轉化為 給定陣列a 0.n 1 元素只能取0,1,2三個值,設計演算法,使得陣列排列成00.0011.1122.222的形式。a cur 2,則a cur 與a end 交換,end c...