LintCode "Sort Colors II"

A variation to Sort Colors I - we take care of 2 sides, recursivelyiteratively.

class Solution{
public:
    /**
     * @param colors: A list of integer
     * @param k: An integer
     * @return: nothing
     */
    void _sort(vector<int> &colors, int s, int e, int sk, int se)
    {
        if (s >= e) return;

        int i = s, j = e;
        while(i < j)
        {
            int k = i;
            while(k <= j)
            {
                if(colors[k] == sk)
                {
                    swap(colors[i++], colors[k]);
                    k = i;
                }
                else if(colors[k] == se)
                {
                    swap(colors[j--], colors[k]);
                }
                else
                    k ++;
            }
            sk ++; se--;
        }
    }
    void sortColors2(vector<int> &colors, int k) {
        _sort(colors, 0, colors.size() - 1, 1, k);
    }
};
原文地址:https://www.cnblogs.com/tonix/p/4823595.html