//三色旗問題,也叫荷蘭旗問題
//一根繩子上有一些藍色、白色、紅色的旗子,它們的排列順序是隨意的
//現要求把旗子分類並按照藍色的旗子都在前,紅色的旗子都在後,白色的旗子在中間的順序排列
//你只能在一根繩子上操縱這一切,並且一次只能調換兩個旗子
#include #define max_flag 30
#define blue 'b'
#define white 'w'
#define red 'r'
//這個演算法就像進度條推進,先是紅條佔滿,接著白條推進,最後藍條推進
void dutchflag(int n,char flagarr[max_flag])
else if(flagarr[wflag]==blue)//有藍旗,藍條開始往後推進
else
{ //僅當當前wflag指的是紅旗,而後面rflag指的不是紅旗時才發生交換。如果前後指的都是紅旗,則直接把rflag前移
//在這個else條件裡沒有動wflag,因為僅僅知道rflag指的不是紅旗,具體是什麼旗色並不清楚
//交換後wflag指向這個非紅旗,再對flagarr[wflag]進行判斷
while (wflag
盡量把注釋寫詳細了,看懂應該沒難度。
理解這個經典問題,可以想象成彩條的推進,先推紅條,再推白條,最後推藍條。
附上從july大神的荷蘭旗文章(偷來的圖~qwq這張圖是排的紅白藍,我排的是藍白紅
這裡的begin、current、end對應的就是我上邊寫的bflag、wflag、rflag
C 語言單鏈表實現荷蘭旗問題
一.裝置及軟體 vc6.0 二.語言 c 三.涉及的資料結構與演算法 單鏈表 尾插法 四.問題描述 荷蘭旗問題亦稱三色旗問題。這裡荷蘭旗用0,1,2分別表示三種顏色 紅,白,藍。用陣列存放一串數字。開始是打亂順序的排列,要求用單鏈表分別存放這三種數,然後按旗子的顏色,紅,白,藍順序輸出。五.主要注意...
荷蘭國旗問題 C語言實現
荷蘭國旗問題 陣列中的元素,小於e的排在陣列左邊 等於在中間 大於在右邊 執行環境 win10 vs2015 結果 執行正確 編者 傾斜的正弦波 include stdafx.h define maxsize 10 int buffer maxsize 小於e的在陣列的左邊 大於e的在陣列右邊 vo...
75 顏色分類(荷蘭旗問題)
給定乙個包含紅色 白色和藍色,一共 n 個元素的陣列,原地 對它們進行排序,使得相同顏色的元素相鄰,並按照紅色 白色 藍色順序排列。此題中,我們使用整數 0 1 和 2 分別表示紅色 白色和藍色。注意 不能使用 庫中的排序函式來解決這道題。示例 輸入 2,0,2,1,1,0 輸出 0,0,1,1,2...