Open Source Your Knowledge, Become a Contributor
Technology knowledge has to be shared and made accessible for free. Join the movement.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <algorithm>
using std::rotate;
bool predicate(int i)
{
return i > 0;
}
int inplace_stable_partition(int *a, int i, int n)
{
if (i == n - 1)
return predicate(a[i]) ? i + 1 : i;
int middle = i + (n - i) / 2;
i = inplace_stable_partition(a, i, middle);
n = inplace_stable_partition(a, middle, n);
rotate(a + i, a + middle, a + n);
return i + n - middle;
}
int main(int argc, char *argv[])
{
int a[] = { 1, -1, 2, -2, 3, -3 };
inplace_stable_partition(a, 0, 6);
for (int i = 0; i < 6; i++)
printf("%d ", a[i]);
return 0;
}
Enter to Rename, Shift+Enter to Preview
Open Source Your Knowledge: become a Contributor and help others learn. Create New Content