Я пытаюсь отсортировать массив двойных значений с помощью qsort, но, похоже, это не работает. Интересно, что здесь пошло не так??
#include <stdio.h>
#include <stdlib.h>
static double compare (const void * a, const void * b)
{
if (*(double*)a > *(double*)b) return 1;
else if (*(double*)a < *(double*)b) return -1;
else return 0;
}
int main() {
int idx;
double* sum_least_square_err;
sum_least_square_err = (double*) malloc (2500*2500*sizeof(double));
sum_least_square_err[0] = 0.642;
sum_least_square_err[1] = 0.236;
sum_least_square_err[2] = 0.946;
idx = 3;
qsort(sum_least_square_err, idx, sizeof(sum_least_square_err), compare);
int i;
for (i=0; i<idx; i++){
fprintf(stderr,"sum_least_square_err[%d] = %.3f\n", i, sum_least_square_err[i]);
}
fprintf(stderr,"MAEE = %.3f\n", sum_least_square_err[idx/2]);
free(sum_least_square_err);
}
Результат:
sum_least_square_err[0] = 0,642
sum_least_square_err[1] = 0,236
sum_least_square_err[2] = 0,946
МАЭЭ = 0,236
typedef int (*qsort_func_t)(const void *, const void *);
. А затем в main(),qsort_func_t qsort_func = compare;
, где qsort_func — параметр, передаваемый в qsort(). Если бы вы сделали это, вы бы получили ошибки/предупреждения компилятора, указывающие на ошибку. - person Lundin   schedule 13.08.2012