問題:給定一個包含紅,白,藍且長度爲 n 的數組,將數組元素進行分類使相同顏色的元素相鄰,並按照紅、白、藍的順序進行排序。
咱們能夠使用整數 0,1 和 2 分別表明紅,白,藍。
例如:有數組 [1, 0, 1, 2], 直接排序成 [0, 1, 1, 2].
要求: 不能使用sort函數, 只掃描遍歷一遍數組ios
1 #include <iostream>
2 using namespace std; 3 4 void sortColors(int * arr, int n) 5 { 6 int left = 0, right = n - 1; 7 8 int middle = 0; 9 10 while(middle <= right) 11 { 12 if(arr[middle] == 0) 13 { 14 swap(arr[middle], arr[left]); 15 left++; 16 middle++; 17 } 18 else if(arr[middle] == 1) 19 { 20 middle++; 21 } 22 else 23 { 24 swap(arr[middle], arr[right]); 25 right--; 26 } 27 } 28 } 29 30 int main() 31 { 32 int arr[10] = {1, 2, 1, 0, 1, 0, 2, 1, 1, 0}; 33 for(int i = 0; i < 10; i++) 34 { 35 cout << arr[i] << "\t"; 36 } 37 cout << endl; 38 sortColors(arr, 10); 39 for(int i = 0; i < 10; i++) 40 { 41 cout << arr[i] << "\t"; 42 } 43 cout << endl; 44 return 0; 45 }