赞
踩
原题: 一个数组,里边存放三种球颜色值:红球为 'R',绿球为 'G ',蓝球为 'B ', 编程对该数组排序,使该数组最后的颜色排列如下:前边元素全部为 'R ',中间元素全部为 'G ',后边为 'B '
#include <iostream> #include <cstring> #include <algorithm> using namespace std; const int maxn=110; char a[maxn]; void qksort(char a[],int n); int main() { cin>>a; qksort(a,strlen(a)); cout<<a<<endl; return 0; } void qksort(char a[],int n) { int i=0,j=n-1; //把字母B交换到数组右边 while(i < j) { while(a[j] == 'B') --j; while(a[i] != 'B') ++i; if(i >=j) break; swap(a[i],a[j]); ++i;--j; } //i指向数组最左边,j指向数组中 不是字母B的 最右一个位置的下标 i=0; //把字母R交换到数组左边 while(i < j) { while(a[i] == 'R') ++i; while(a[j] != 'R') --j; if(i >=j) break; swap(a[i],a[j]); ++i;--j; } }
想法是先把字母B交换到数组右边,在把字母R交换到数组左边,时间复杂度O(n)。