码迷,mamicode.com
首页 > 其他好文 > 详细

荷兰国旗问题

时间:2015-09-04 07:21:04      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:

  将乱序的红白蓝三色小球排列成同颜色在一起的小球组(按照红白蓝排序),这个问题称为荷兰国旗问题。这是因为我们可以将红白蓝三色小球想象成条状物,有序排列后正好组成荷兰国旗。我们用0表示红球,2为篮球,1为白球。

  解答:这个问题典型地利用快排中partition过程。不过,要用三个指针,一前begin,一中current,一后end,begin与current都初始化指向数组首部,end初始化指向数组尾部。

    1. current遍历整个序列,current指1时,不交换,current++

    2. current指0时,与begin交换,而后current++,begin++

    3. current指2时,与end交换,而后,current不动,end--

void Func(int* input, int len) {
    if (input == NULL || len <= 0)
        return;
    
    int current = 0;
    int begin = 0;
    int end = len - 1;

    while (current <= end) {
        if (array[current] == 0) {
            swap(array[current], array[begin]);
            current++;
            begin++;
        } else if (array[current] == 1) {
            current++;
        } else {
            swap(array[current], array[end]);
            end--;
        }
    }
}

 

荷兰国旗问题

标签:

原文地址:http://www.cnblogs.com/vincently/p/4781010.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!