/*
* 荷兰3色国旗问题:
* 由红/白/蓝组成的序列,用O(n)解决,按照红/白/蓝顺序排列;
* 解法:
* 建立3个指针,j:当前扫描的元素,代表他所维护的白色区域
* i:他之前的元素全是红色;代表他所维护的红色区域;
* k:他之后的元素全是蓝色;代表他所维护的蓝色区域;
* 顺序扫描此线性表,用j与i、k交换;
*/
public class ThreeSe_Guo_Qi {
void Flag_Arrange(String flag[]){
int n = flag.length;//i=10
int i = 0,j=0,k=n-1;
while(j<=k){
switch(flag[j]){
case “红”:{
//最好用方法交换
String temp =flag[i];
flag[i] = flag[j];
flag[j] = temp;
//这里保证了换过来的一定是白色,所以直接j++
i++;
j++;
break;
}
case “白”:{
//
j++;
break;
}
case “蓝”:{
//最好用方法交换
String temp =flag[j];
flag[j] = flag[k];
flag[k] = temp;
//注意没有j++,防止换过来的是其他色而不处理!
k–;
break;
}
}
}
for(String p :flag)
System.out.print(p+" ");
}
public static void main(String[] args) {
String flag[]={"蓝","白","红","红","红","白","白","蓝","白","蓝"};
new ThreeSe_Guo_Qi().Flag_Arrange(flag);
}
}