Se devi solo distinguere rispetto ad una soglia non serve ordinare l'array, puoi farlo in complessità lineare ( O(N) ) e ordinando parzialmente
codice:
#include <stdio.h>
int partition(int a[], int n, int e) {
int from, to;
for(from = to = 0; from < n; ++from) {
if(a[from] < e) {
int tmp = a[to];
a[to] = a[from];
a[from] = tmp;
++to;
}
}
return to;
}
#define N 8
int main(void) {
int i;
int test[N] = {1283, 23, 5, 65, 2, 8, 56, 32};
int split_on = 56;
int split = partition(test, N, split_on);
printf("Minori della soglia(%d): ", split_on);
for(i = 0; i < split; ++i) {
printf("%d ", test[i]);
}
printf("\nMaggiori o uguali alla soglia(%d): ", split_on);
for(i = split; i < N; ++i) {
printf("%d ", test[i]);
}
return 0;
}