现有n个红白蓝三种不同颜色的小球,乱序排列在一起,请通过两两交换任意两个球,使得从左至右,依次是一些红球、一些白球、一些蓝球。
#include <iostream>
using namespace std;
#define R 'R'
#define G 'G'
#define B 'B'
int main() {
char arr[] = { G, B, B, G, R, G, R, B };
int len = sizeof(arr) / sizeof(char);
int begin = 0, cur = 1, end = len - 1;
while (cur <= end) {
if (arr[cur] == R) {
swap(arr[begin], arr[cur]);
/*begin必定在cur后,且Begin遇到的元素只能是G,
* 此时交换后,cur指向G,直接跳过cur++
**/
cur++;
begin++;
} else if (arr[cur] == G) {
cur++;
} else if (arr[cur] == B) {
swap(arr[cur], arr[end]);
end--;
}
}
for (int i = 0; i < len; ++i) {
cout << arr[i] << " ";
}
return 0;
}
2937

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



