荷兰国旗问题

package Some_Algorithm;

/**
 * Author: songpo.zhang
 * Date:   2018/8/29
 * Target:
 * 荷兰国旗问题
 */

public class NetherlandsFlag {

    /**
     *
     * @param arr
     * @param num
     */
    public static void netherlansFlag(int[] arr, int num) {
        if (arr == null)
            return;
        subProcess(arr, num, 0, arr.length - 1);
    }

    /**
     *
     * @param arr
     * @param num
     * @param left
     * @param right
     */
    public static void subProcess(int[] arr, int num, int left, int right) {
        int L = left - 1;
        int R = right + 1;
//        int i = left;
//        while (i < R) {
//            if (arr[i] < num) {
//                Util.swap(arr, L+1, i);
//                L++;
//                i++;
//            } else if (arr[i] > num) {
//                Util.swap(arr, R-1, i);
//                R--;
//            } else {
//                i++;
//            }
//        }
        while (left < R) {
            if (arr[left] < num) {
                Util.swap(arr, ++L, left++);
            } else if (arr[left] > num) {
                Util.swap(arr, --R, left);
            } else {
                left++;
            }
        }
    }

    /**
     *
     * @param args
     */
    public static void main(String[] args) {
        int[] arr = {3, 5, 5, 7, 5, 2, 9, 1};
        netherlansFlag(arr, 5);
        Util.printArray(arr);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值