荷兰国旗问题c++计数排序
时间: 2024-03-25 08:33:52 浏览: 71
荷兰国旗问题是一道经典的排序问题,也被称为三向切分快速排序。它的目标是将一个包含红、白、蓝三种颜色的数组按照红、白、蓝的顺序进行排序。
在C++中,可以使用计数排序算法来解决荷兰国旗问题。计数排序是一种线性时间复杂度的排序算法,它通过统计每个元素出现的次数,然后按照元素的顺序重新排列数组。
以下是使用计数排序算法解决荷兰国旗问题的步骤:
1. 统计数组中红、白、蓝三种颜色的个数。
2. 根据统计结果,重新填充数组,按照红、白、蓝的顺序排列。
下面是C++代码示例:
```cpp
#include <iostream>
using namespace std;
void dutchFlagSort(int arr[], int n) {
int redCount = 0, whiteCount = 0, blueCount = 0;
// 统计红、白、蓝三种颜色的个数
for (int i = 0; i < n; i++) {
if (arr[i] == 0) {
redCount++;
} else if (arr[i] == 1) {
whiteCount++;
} else if (arr[i] == 2) {
blueCount++;
}
}
// 重新填充数组
for (int i = 0; i < n; i++) {
if (i < redCount) {
arr[i] = 0;
} else if (i < redCount + whiteCount) {
arr[i] = 1;
} else {
arr[i] = 2;
}
}
}
int main() {
int arr[] = {2, 0, 2, 1, 1, 0};
int n = sizeof(arr) / sizeof(arr[0]);
dutchFlagSort(arr, n);
cout << "排序后的数组:";
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
return 0;
}
```
运行以上代码,输出结果为:0 0 1 1 2 2,即按照红、白、蓝的顺序进行了排序。
阅读全文