c_cpp 给出一个大小为N的数组,其内容为0,1或2(当然重复)。一次性对数组进行排序。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 给出一个大小为N的数组,其内容为0,1或2(当然重复)。一次性对数组进行排序。相关的知识,希望对你有一定的参考价值。

void sort_array_containing_0_1_2_only(vector<int> &A) {
    if(A.empty()) return;
    int i = 0, j = A.size()-1;
    int k = 0;
    while(k <= j) {   // gist, should <= j
        if(A[k] == 1) k++;
        else if(A[k] == 0) 
            swap(A[i++], A[k++]); // cannot forget to update k!!!
        else // A[k] == 2
            swap(A[j--], A[k]); // no ++?
    }
}

void sort_array_containing_012(vector<int>& A) {
    if(A.empty()) return;
    int edge_of_0 = 0;
    int edge_of_2 = A.size() - 1;
    int i = 0;
    while(edge_of_0 <= edge_of_2) {
        if(A[i] == 1)
            i++;
        else if(A[i] == 0)
            swap(A[edge_of_0++], A[i++]);
        else swap(A[edge_of_2--], A[i]); // no ++?
    }
}

以上是关于c_cpp 给出一个大小为N的数组,其内容为0,1或2(当然重复)。一次性对数组进行排序。的主要内容,如果未能解决你的问题,请参考以下文章

从数组(Java)中获取所有大小 n 组合的算法? [关闭]

旋转数组的最小数字

旋转数组的最小数字

c_cpp 给定Ñ个顶点的多边形,每个顶点标有一个整数,每条边上标有+(加)或是×(乘)号,并且Ñ条边按照顺时针依次编号为1〜n的给出。了一个N = 4个顶点的多边形。游

[剑指Offer] 旋转数组的最小数字

[剑指Offer] 旋转数组的最小数字