1. 程式人生 > >14、【常見算法】數組分組排序

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

例如 sort 直接排序 () color 問題 swap span i++

問題:給定一個包含紅,白,藍且長度為 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 }

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