14、【常见算法】数组分组排序

问题:给定一个包含红,白,蓝且长度为 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 }

猜你喜欢

转载自www.cnblogs.com/Long-w/p/9831485.html
今日推荐