關於荷蘭國旗排序問題可以簡化理解將乙個陣列中的資料排序,比如給定乙個buffer內部元素有n個0,1,2,buffer內部是無序的,如果要求通過一趟掃瞄,並且不能利用額外的空間,進行排序如何解決。
這種問題最直觀的思想就是採用多指標策略,元素起始位置乙個移動索引a,元素的尾部乙個移動索引b,然後乙個移動索引c來掃瞄陣列,開始的時候a與c的索引位置形同,如果這個時候c位置是0則與a進行交換,然後a與c索引都進行增加,這一步操作之後我們可以確保a索引位置指標的元素都是0,如果c位置是1則讓c進行索引自增,這個時候a的索引位置與c的索引位置是已經產生差別,再次檢測c的位置發現是2,這時候需要與b索引的尾部元素交換然後b索引自減,這個時候需要特別關注一點,就是b的元素交換成功以後,我們可以理解為b索引位置後的元素都是2,b與c交換了以後,我們並不能讓c索引進行自增,因為換過來的新元素值我們不確定是多少,換言之此刻的c索引位置指向的元素可能是任何數,我們需要再重新檢測下,所以這個時候b元素進行–,c元素索引不動。當c元素的索引位置與b元素索引位置重疊的時候此陣列完成掃瞄,時間複雜度為n。
簡易demo**如下:
void sort(vector& nums)
else if(nums[z] == 2)
else
}
}
荷蘭國旗問題(快速排序初步思想)
給定乙個整數陣列,給定乙個值k,這個值在原陣列中一定存在,要求把陣列中小於k的元素放到陣列的左邊,大於k的元素放到陣列的右邊,等於k的元素放到陣列的中間,最終返回乙個整數陣列。例如 給定陣列 2,3,1,4,7,6,5,10,9 給定乙個值9,那麼經過處理後結果陣列是 2,3,1 4,7,6,5,9...
荷蘭國旗問題
上方的便是乙個荷蘭國旗,從圖中我們可以很清楚的看出它的特點,它有三個區域組成,即紅,白,藍。好,現在我們的問題出來了。現在我們面前有一張桌子,桌子上整齊的擺放著紅色,白色,藍色三種線條,但他們的順序是凌亂的。我們的要求是 用乙個演算法把這些線條挑出來重新擺放順序,最後的結果就像上圖的荷蘭國旗,紅色在...
荷蘭國旗問題
問題 荷蘭國旗是由紅白藍三種顏色組成,現假設很多這三種顏色的線被打亂放置,要求從頭掃瞄一遍,3種顏色自然分開,顏色順序是紅,白,藍。問題分析 1 編碼 題目中有三種顏色,可以用0 紅,1 白,2 藍進行編碼。3 演算法 a 把n個0,1,2三種元素隨機放入陣列模擬很多這三種顏色的線被打亂放置的場景 ...