問題描述: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;
}