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;
}
Press desired key combination and then press ENTER.
 Open Source Your Knowledge: become a Contributor and help others learn. Create New Content