荷蘭旗問題(C語言實現)

2021-06-28 12:10:01 字數 907 閱讀 4480

//三色旗問題,也叫荷蘭旗問題

//一根繩子上有一些藍色、白色、紅色的旗子,它們的排列順序是隨意的

//現要求把旗子分類並按照藍色的旗子都在前,紅色的旗子都在後,白色的旗子在中間的順序排列

//你只能在一根繩子上操縱這一切,並且一次只能調換兩個旗子

#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...