荷兰3色国旗问题

/*
* 荷兰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);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值