Интересно насчет рекурсии здесь в функции перестановки, рекурсия здесь - сортировка массива по заданному числу (x), элементы меньше X, отсортированные в начале, и элементы больше X, отсортированные в конце. массива. но, как вы можете видеть в последних двух строках, важно ли ставить рекурсию перед swap? И что случилось, если поставить рекурсию после обмена? всегда ли нужно делать рекурсию раньше?
void rearrange(int a[], int n, int x) {
if (n == 0)
return;
if (a[0] <= x)
rearrange(a + 1, n - 1, x);
else {
if (a[n - 1] > x)
rearrange(a, n - 1, x);
else {
rearrange(a + 1, n - 2, x);
swap(a, a + n - 1);
}
}
}