В зависимости от количества элементов:
- 1:
(count == n - 1)
ложно, поэтому вы не печатаете - 2:
(count == n - 1)
всегда верно, поэтому вы печатаете, ивы отсортировали массив - > 1:
(count == n - 1)
всегда ложно, поэтому вы не печатаете (чтобы убедиться, что я использовал брутальная сила для проверки)
Iтакже рекомендуем вам всегда проверять результат scanf , чтобы убедиться, что введено правильное значение.
Существует много способов сортировки с использованием (странно) рекурсии, один из которых может быть:
#include <stdio.h>
#include <stdlib.h>
int sort(int a[], int max)
{
if (max == 0)
return 0;
int modified;
if (a[0] > a[1]) {
int v = a[0];
a[0] = a[1];
a[1] = v;
modified = 1;
}
else
modified = 0;
return (sort(a + 1, max - 1) && sort(a, max - 1)) || modified;
}
int main ()
{
int n, i;
printf ("enter the number of elements\n");
if ((scanf ("%d", &n) != 1) || (n <= 0))
return -1;
int * a = malloc(n * sizeof(int));
if (a == NULL) {
puts("not enough memory");
return -1;
}
printf ("enter the array elements\n");
for (i = 0; i < n; i++) {
if (scanf ("%d", &a[i]) != 1) {
puts("invalid value");
return -1;
}
}
sort(a, n - 1);
for (i = 0; i < n; i++)
printf ("%d ", a[i]);
putchar('\n');
free(a);
return 0;
}
Компиляция и выполнение:
pi@raspberrypi:/tmp $ gcc -pedantic -Wextra b.c
pi@raspberrypi:/tmp $ ./a.out
enter the number of elements
1
enter the array elements
1
1
pi@raspberrypi:/tmp $ ./a.out
enter the number of elements
2
enter the array elements
1 2
1 2
pi@raspberrypi:/tmp $ ./a.out
enter the number of elements
2
enter the array elements
2 1
1 2
pi@raspberrypi:/tmp $ ./a.out
enter the number of elements
4
enter the array elements
4 3 2 1
1 2 3 4