荷兰国旗问题C语言代码
时间: 2024-09-21 15:04:34 浏览: 37
荷兰国旗问题是一个经典的计算机科学问题,它的目标是将一个只包含三种颜色(红、白、蓝)的数组排成一种特定的形式,即红色在最左边,蓝色在最右边,中间部分是白色。这个问题可以使用双指针技巧解决,一个指向数组开始,另一个指向数组结束。
下面是一个简单的C语言代码实现:
```c
#include <stdio.h>
void arrangeFlags(int arr[], int n) {
int red = 0, white = 0;
while (white < n && arr[white] == 0) { // 找到第一个白色
white++;
}
while (red < n && arr[n - 1 - red] != 1) { // 找到最后一个蓝色
red++;
}
for (int i = 0; i < white; i++) { // 将白色移至中间
printf("%d ", arr[i]);
}
for (int i = red; i < n - red; i++) { // 移动红色和蓝色
printf("%d ", arr[i]);
}
for (int i = n - red - 1; i < n; i++) { // 输出剩余的蓝色
printf("%d ", arr[i]);
}
}
int main() {
int arr[] = {1, 0, 0, 1, 0, 1, 0, 0, 1};
int n = sizeof(arr) / sizeof(arr[0]);
arrangeFlags(arr, n);
return 0;
}
阅读全文