荷蘭國旗 三色排序

2021-08-03 11:13:21 字數 667 閱讀 3319

1.荷蘭國旗問題:陣列只包含0,1,2對其排序

(1)首先最簡單的就是計數排序,當然這裡不討論,一般情況下考察的都不是這個

(2)和快排劃分過程相似:時間o(n),空間o(1)。

快排劃分的時候有個標誌位 i=left-1,如果a[j]>x,j++,i++否則j++,,i++,a[j] a[i]互換位置.而該題目可以設定兩個標誌位,i,j,乙個在最左邊乙個在最右邊。對於陣列a[0~n-1],初始i=0,j=n;

遍歷元素和1比較:

1)如果=1,直接k++,考察下乙個數

2)如果=0,左邊標誌位i++,a[k]a[i]進行交換,考察下乙個數

3)如果=2,右邊標誌位j--,a[k][j]交換,注意這裡不能直接考察下乙個數,要在對a[k]與1進行比較,a[j]可能是0 1 或者2,所以此時只要將當前位置k不變在做一次比較即可。

4)直到當前位置k和右邊標記j相同時,停止

[0,1,1,0,2,2],6
返回:[0,0,1,1,2,2]
public class threecolor {

public int sortthreecolor(int a, int n) {

// write code here

int i=-1;

int j=n;

for(int k=0;k

荷蘭3色國旗問題

荷蘭3色國旗問題 由紅 白 藍組成的序列,用o n 解決,按照紅 白 藍順序排列 解法 建立3個指標,j 當前掃瞄的元素,代表他所維護的白色區域 i 他之前的元素全是紅色 代表他所維護的紅色區域 k 他之後的元素全是藍色 代表他所維護的藍色區域 順序掃瞄此線性表,用j與i k交換 public cl...

nowcoder 三色排序

有乙個只由0,1,2三種元素構成的整數陣列,請使用交換 原地排序而不是使用計數進行排序。給定乙個只含0,1,2的整數陣列a及它的大小,請返回排序後的陣列。保證陣列大小小於等於500。測試樣例 0,1,1,0,2,2 6 返回 0,0,1,1,2,2 定義乙個左指標,乙個右指標。當遍歷到0時,和左指標...

三色排序問題

輸入乙個整型陣列,每個元素在0 2之間,其中0,1,2分別代表紅 白 藍。現要求對陣列進行排序,相同顏色的在一起,而且按紅白藍順序先後排列。要求時間複雜度為o n 最容易想到的是排序,比如快排,歸併,堆排等,但它們的時間複雜度為o nlogn 與題意不符。第二種想到的是計數排序,掃瞄一遍過去,分別記...