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 與題意不符。第二種想到的是計數排序,掃瞄一遍過去,分別記...