使用三个指针维护三个区间
#include <stdio.h>
typedef enum {
BLUE = 1,
WHITE = 2,
RED = 3
} Color;
Color arr[] = {RED, BLUE, RED, WHITE, WHITE, RED, WHITE, BLUE, BLUE, RED, WHITE};
void Swap(Color* arr, int i, int j) {
Color t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
void Print(Color* arr, int n) {
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
void Sort(Color* arr, int n) {
int i = 0;
int j = 0;
int k = n - 1;
while (i <= k) {
if (arr[i] == BLUE) {
Swap(arr, i++, j++);
} else if (arr[i] == WHITE) {
i++;
} else if (arr[i] == RED) {
Swap(arr, i, k--);
}
}
return;
}
int main() {
int n = sizeof(arr) / sizeof(arr[0]);
Print(arr, n);
Sort(arr, n);
Print(arr, n);
}
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有