#include <iostream>
using namespace std;
void Swap(int* v1, int* v2) {
int temp = *v1;
*v1 = *v2;
*v2 = temp;
}
void SortArray(int* array, int len) {
int i = 0, j = len - 1, k = 0;
while (k < j) {
if (array[k] == 2) {
while(array[j] == 2 && j > k) {
j--;
}
if (j > k) {
swap(array[k], array[j]);
}
}
if (array[k] == 0) {
while(array[i] == 0 && i < k) {
i++;
}
if (i < k) {
swap(array[i], array[k]);
}
}
if (array[k] == 1 || k == i) {
k++;
}
}
}
int main() {
const int kLen = 20;
int array[kLen] = {1, 2, 1, 0, 2, 1, 2, 2, 1, 0, 2, 1, 2, 1, 2, 0, 0, 2, 1, 1};
SortArray(array, kLen);
for (int i = 0; i < kLen; i++) {
cout << array[i] << " ";
}
}
一个数组只含0,1,2三种数,对这个数组排序,要求只能扫描一遍数组
最新推荐文章于 2022-08-24 22:09:44 发布
本文介绍了一个高效的三色排序算法实现,该算法可以将数组中的0、1、2三种元素按顺序排列。通过使用指针技巧,算法能在一次遍历内完成排序,避免了不必要的元素移动。
5万+

被折叠的 条评论
为什么被折叠?



