題目描述
現有n個紅白藍三種不同顏色的小球,亂序排列在一起,請通過兩兩交換任意兩個球,使得從左至右,依次是一些紅球、一些白球、一些藍球。
這個問題類似快排中partition過程,只是需要用到三個指標:乙個前指標begin,乙個中指標current,乙個後指標end,current指標遍歷整個陣列序列,當
1.current指標所指元素為0時,與begin指標所指的元素交換,而後current++,begin++ ;
2.current指標所指元素為1時,不做任何交換(即球不動),而後current++ ;
3.current指標所指元素為2時,與end指標所指的元素交換,而後,current指標不動,end-- 。
為什麼上述第3點中,current指標所指元素為2時,與end指標所指元素交換之後,current指標不能動呢?因為第三步中current指標所指元素與end指標所指元素交換之前,如果end指標之前指的元素是0,那麼與current指標所指元素交換之後,current指標此刻所指的元素是0,此時,current指標能動麼?不能動,因為如上述第1點所述,如果current指標所指的元素是0,還得與begin指標所指的元素交換。
while( current<=end )
else if( array[current] == 1 )
else //when array[current] =2
}
荷蘭國旗問題
上方的便是乙個荷蘭國旗,從圖中我們可以很清楚的看出它的特點,它有三個區域組成,即紅,白,藍。好,現在我們的問題出來了。現在我們面前有一張桌子,桌子上整齊的擺放著紅色,白色,藍色三種線條,但他們的順序是凌亂的。我們的要求是 用乙個演算法把這些線條挑出來重新擺放順序,最後的結果就像上圖的荷蘭國旗,紅色在...
荷蘭國旗問題
問題 荷蘭國旗是由紅白藍三種顏色組成,現假設很多這三種顏色的線被打亂放置,要求從頭掃瞄一遍,3種顏色自然分開,顏色順序是紅,白,藍。問題分析 1 編碼 題目中有三種顏色,可以用0 紅,1 白,2 藍進行編碼。3 演算法 a 把n個0,1,2三種元素隨機放入陣列模擬很多這三種顏色的線被打亂放置的場景 ...
荷蘭國旗問題
荷蘭的國旗由紅色 白色和藍色3種顏色組成。現在假設有很多這3種顏色的線被存放在乙個陣列裡,要求每次操作僅能進行一次交換,在原陣列的基礎上操作。待對陣列進行一遍掃瞄後,3種顏色自然分開,顏色順序為紅 白 藍。另外,要求在o n 的複雜度下,是移動次數最少。荷蘭國旗問題 include include ...