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] 旋转数组的最小数字