问题描述:3种颜色在一个数组里,每次只可交换一次,扫描一次后,三种颜色自然分开,应为颜色为:红,白,蓝,(荷兰国旗的颜色)所也叫荷兰国旗问题
//核心思路:统计出各种颜色的”国旗“的数量,然后按照指定顺序显示
代码实现:
#include<iostream>
using namespace std;
void sortHL(int* a,int n) {
int j=0,k=0,i;//i为数组下标,j记录有红色块数,k记录蓝色块数
for(i=0;i<n;i++) {
if(a[i]==1)//蓝色
j++;
if(a[i]==2)//红色
k++;
}
//按规定的顺序排好
for(i=0;i<=k-1;i++)//前k块为红色
a[i]=2;
for(i=k;i<=n-j;i++)//中间是白色
a[i]=0;
for(i=n-j;i<=n-1;i++)//后j块是蓝色
a[i]=1;
}
int main() {
int a[]={1,2,0,1,2,0,1,2,1,0,2};//原数组
int n=sizeof(a)/sizeof(int);//数组长度
for(int i=0;i<n;i++)
cout<<a[i]; //输出原来的数组
cout<<endl;
sortHL(a,n);
for(i=0;i<n;i++)
cout<<a[i];//输出排好的“国旗”
cout<<endl;
return 0;
}