問題描述:
荷蘭國旗有三橫條塊構成,自上到下的三條顏色依次為紅,白,藍。現有若干由紅,白,藍三種顏色的條塊序列,要將它們重新排列使所有相同顏色的條塊在一起。本問題要求將所有紅色的條塊放在最左邊,所有白色的條塊放在中間,所有藍色的條塊放在最右邊。
解決辦法:
將三種顏色放入乙個數字中,前部分為紅色,中間部分為白色,末尾部分為藍色,設定三個指標,開始指標begin 目前指向指標current 和末尾指向指標end,假設紅,白,藍分別用0,1,2表示,begin和current指標同時指向陣列第乙個元素,end 指標指向最後乙個元素,
步驟,移動current 指標,由左向右移動,當遇到數字為0,則,將current指向的數字和begin指向的數字交換,並且begin+1向右移動一位, current也向前移動一位
當指向的是1時,繼續向後移動一位,元素位置相對不變,若current指向的是2時,此時就與end 交換元素,然後end像前(向左移動一位),current繼續向前移動一位,如此迴圈下去,直到current指向的和end指向的相同時,結束操作!
演算法實現:
待完結~
演算法 荷蘭國旗問題
荷蘭國旗是由紅白藍3種顏色的條紋拼接而成,如下圖所示 假設這樣的條紋有多條,且各種顏色的數量不一,並且隨機組成了乙個新的圖形,新的圖形可能如下圖所示,但是絕非只有這一種情況 需求是 把這些條紋按照顏色排好,紅色的在上半部分,白色的在中間部分,藍色的在下半部分,我們把這類問題稱作荷蘭國旗問題。我們把荷...
演算法習作 荷蘭國旗問題
出處 1.問題描述 我們將亂序的紅白藍三色小球排列成有序的紅白藍三色的同顏色在一起的小球組。這個問題之所以叫荷蘭國旗,是因為我們可以將紅白藍三色小球想象成條狀物,有序排列後正好組成荷蘭國旗。2.問題分析 這個問題我們可以將這個問題視為乙個陣列排序問題,這個陣列分為前部,中部和後部三個部分,每乙個元素...
荷蘭國旗演算法
問題 現有紅,白,藍三個不同顏色的小球,亂序排列在一起,請重新排列這些小球,使得紅白藍三色的同顏色的球在一起。問題轉化為 給定陣列a 0.n 1 元素只能取0,1,2三個值,設計演算法,使得陣列排列成00.0011.1122.222的形式。a cur 2,則a cur 與a end 交換,end c...