1四、【常見算法】數組分組排序

問題:給定一個包含紅,白,藍且長度爲 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 }
相關文章
相關標籤/搜索