nowcoder 三色排序

2021-08-14 22:26:19 字數 638 閱讀 5749

有乙個只由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 互換位置.而該題目可以設定兩個標誌...