有乙個只由0,1,2三種元素構成的整數陣列,請使用交換、原地排序而不是使用計數進行排序。
給定乙個只含0,1,2的整數陣列a及它的大小,請返回排序後的陣列。保證陣列大小小於等於500。
測試樣例:
[0,1,1,0,2,2],6
返回:[0,0,1,1,2,2]
定義乙個左指標,乙個右指標。當遍歷到0時,和左指標數字交換。當遍歷到2時,和右指標數字交換。
class
threecolor:
defsortthreecolor
(self, a, n):
# write code here
left = 0
right = n - 1
i = 0
while i <= right:
if a[i] == 0:
a[left], a[i] = a[i], a[left]
left += 1
i += 1
elif a[i] == 2:
a[right], a[i] = a[i], a[right]
right -= 1
else:
i += 1
return a
三色排序問題
輸入乙個整型陣列,每個元素在0 2之間,其中0,1,2分別代表紅 白 藍。現要求對陣列進行排序,相同顏色的在一起,而且按紅白藍順序先後排列。要求時間複雜度為o n 最容易想到的是排序,比如快排,歸併,堆排等,但它們的時間複雜度為o nlogn 與題意不符。第二種想到的是計數排序,掃瞄一遍過去,分別記...
雙色 三色排序問題
實現乙個函式,給定乙個陣列,要求使得陣列中負數在所有正數的前面 實現乙個函式,給定乙個陣列,要求使得陣列中負數在前正數在後零在中間 1 include2 include34 輸出陣列元素 5void print int arr,int len 6 交換兩個數 7void swap int left,...
荷蘭國旗 三色排序
1.荷蘭國旗問題 陣列只包含0,1,2對其排序 1 首先最簡單的就是計數排序,當然這裡不討論,一般情況下考察的都不是這個 2 和快排劃分過程相似 時間o n 空間o 1 快排劃分的時候有個標誌位 i left 1,如果a j x,j i 否則j i a j a i 互換位置.而該題目可以設定兩個標誌...