问题:给定一个包含红,白,蓝且长度为 n 的数组,将数组元素进行分类使相同颜色的元素相邻,并按照红、白、蓝的顺序进行排序。
我们可以使用整数 0,1 和 2 分别代表红,白,蓝。
例如:有数组 [1, 0, 1, 2], 直接排序成 [0, 1, 1, 2].
要求: 不能使用sort函数, 只扫描遍历一遍数组
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 }
原文地址:https://www.cnblogs.com/Long-w/p/9831485.html
时间: 2024-12-17 21:43:45