02荷蘭國旗問題

2021-10-04 23:45:34 字數 581 閱讀 3407

快排的merge過程

給你乙個固定的陣列,在這個陣列上進行操作。給定乙個x,最後的結果是:小於x的數放在陣列的左邊,等於x的數放在陣列中間,大於x的數放在陣列的右側。

三個指標用於指示區域,一共分為四個區域:小於x、等於x,待處理區和大於x。開始的時候,小於x的右邊界l=-1(一會說為啥是-1,而不是0),等於x的右邊界為m(等於x的左邊界就是l),大於x區的左邊界在最右邊r。用m遍歷陣列,如果a[m]比x小,就把a[m]同(l+1)的位置互換,同時l++,m++。什麼意思呢?就是說a[m]比x小,所以小於x區會加大,所以l++,而加大後小於x的右邊界是l+1,所以這樣。如果等於a[m]=x,l和r都不變,m++。如果大於x,r–,m是不變的,因為換過來的數不一定就等於x。核心思想就一句話:小於區推著等於區往右走,直至等於區的右邊界和大於區碰上

l指標的意思是,小於等於l的數都是小於區的,r的意思是大於等於r的數都是大於區的。了所以l和r的數值要比正常陣列區間的數少一位和多一位。

void testmethod(vector&a,int x)

}

荷蘭國旗問題

上方的便是乙個荷蘭國旗,從圖中我們可以很清楚的看出它的特點,它有三個區域組成,即紅,白,藍。好,現在我們的問題出來了。現在我們面前有一張桌子,桌子上整齊的擺放著紅色,白色,藍色三種線條,但他們的順序是凌亂的。我們的要求是 用乙個演算法把這些線條挑出來重新擺放順序,最後的結果就像上圖的荷蘭國旗,紅色在...

荷蘭國旗問題

問題 荷蘭國旗是由紅白藍三種顏色組成,現假設很多這三種顏色的線被打亂放置,要求從頭掃瞄一遍,3種顏色自然分開,顏色順序是紅,白,藍。問題分析 1 編碼 題目中有三種顏色,可以用0 紅,1 白,2 藍進行編碼。3 演算法 a 把n個0,1,2三種元素隨機放入陣列模擬很多這三種顏色的線被打亂放置的場景 ...

荷蘭國旗問題

荷蘭的國旗由紅色 白色和藍色3種顏色組成。現在假設有很多這3種顏色的線被存放在乙個陣列裡,要求每次操作僅能進行一次交換,在原陣列的基礎上操作。待對陣列進行一遍掃瞄後,3種顏色自然分開,顏色順序為紅 白 藍。另外,要求在o n 的複雜度下,是移動次數最少。荷蘭國旗問題 include include ...