标签:扫描 col == end pre 直接 using iostream font
问题:给定一个包含红,白,蓝且长度为 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 }
标签:扫描 col == end pre 直接 using iostream font
原文地址:https://www.cnblogs.com/Long-w/p/9831485.html