Dutch Flag Problem

 

#include <iostream>
#include <vector>
using namespace std;


void dutchFlag(vector<int>& v, int pivot) {
int smaller = 0;
int equal = 0;
int larger = v.size() - 1;
while (equal < larger) {
if (v[equal] < pivot) {
swap(v[smaller++], v[equal++]);
}
else if (v[equal] == pivot) {
equal++;
}
else {
swap(v[larger--], v[equal]);
}
}
}

/*void dutchFlag(vector<int>& v, int pivot) {
int smaller = 0;
for (int i = 0; i < v.size(); i++) {
if (v[i] < pivot) {
swap(v[i], v[smaller++]);
}
}
int larger = v.size() - 1;
for (int i = v.size() - 1; i >= 0 && v[i] >= pivot; i--) {
if (v[i] > pivot) {
swap(v[i], v[larger--]);
}
}
}*/

/*
void dutchFlag(vector<int>& v, int pivot) {
for (int i = 0; i < v.size(); i++) {
for (int j = i + 1; j < v.size(); j++) {
if (v[j] < pivot) {
swap(v[i], v[j]);
break;
}
}
}
for (int i = v.size() - 1; i >= 0 && v[i] >= pivot; i--) {
for (int j = i - 1; j >= 0 && v[i] >= pivot; j--) {
if (v[j] > pivot) {
swap(v[i], v[j]);
break;
}
}
}
}*/

int main()
{
vector<int> v = { 1, 0, 0 , 2, 1, 2, 0 };
dutchFlag(v, 1);
for (auto i = v.begin(); i != v.end(); i++)
cout << *i << " ";
return 0;
}

Comments

Popular posts from this blog

Clear right most set bit of an integer n

Advancing through an Array

Partial Sum