Muszę napisać funkcję sprawdzająca w jakim czasie algorytm sortowania radzi sobie z sortowaniem danych.
Wymyśliłem coś takiego, niestety mam pewien problem z poniższym kodem. Program po prostu się wysypuje, dostaję komunikat w debugerze SIGSEGV:Segmentational fault.

#include <stdlib.h>
#include <stdbool.h>
#include <time.h>
#include "SortTest.h"

int randN(int n) {
    return rand() % n;
}

void initTestArray(int tab[], int n, int dlugoscPerm) {
    for (int i = 0; i < n; i++) {
        tab[i] = randN(dlugoscPerm);
    }
}
void howFast(void (*sort)(int*, int),const int ileTestow,const int ileLiczb,
        const int dlugoscLiczb, double wynik[3]) {
    double czasy[ileTestow];
    int liczby[ileLiczb];
    double max = 0, min = 10000000, a, b;

    for (int i = 0; i < ileTestow; i++) {
        initTestArray(liczby, ileLiczb, dlugoscLiczb);
        a = clock();
        sort(liczby, ileLiczb);
        b = clock() - a;

        czasy[i] = b;
        if (b > max)
            max = b;
        else if (b < min)
            min = b;
    }
    double sredniCzas = 0;
    for (int i = 0; i < ileTestow; i++) {
        sredniCzas += czasy[i];
    }
    wynik[0] = min;
    wynik[1] = sredniCzas / ileTestow;
    wynik[2] = max;

}

void howFastQ(
        void (*sort)(void *, size_t, size_t,
                int (*comparator)(const void *, const void *)),
        const int ileTestow, const int ileLiczb, const int dlugoscLiczb,
        double wynik[]) {

    int liczby[ileLiczb];
    double czasy[ileTestow];
    double max = 0.0, min = 10000000, a, b;

    for (int i = 0; i < ileTestow; i++) {
        initTestArray(liczby, ileLiczb, dlugoscLiczb);
        a = clock();
        sort(liczby, ileLiczb, sizeof(double), cmpfunc);
        b = clock() - a;

        czasy[i] = b;
        if (b > max)
            max = b;
        else if (b < min)
            min = b;
    }

    double sredniCzas = 0;
    for (int i = 0; i < ileTestow; i++) {
        sredniCzas += czasy[i];
    }
    wynik[0] = min;
    wynik[1] = sredniCzas / ileTestow;
    wynik[2] = max;

}
int cmpfunc(const void * a, const void * b) {
    return (*(int*) a - *(int*) b);
}
bool isSorted(double tab[], double sortedTab[], int n) {
    quickSort(tab, 0, n);
    for (int i = 0; i < n; i++) {
        if (tab[i] != sortedTab[i]) {
            return false;
        }
    }
    return true;
}
#include <stdbool.h>
#include <stdlib.h>
#ifndef SORTTEST_H_
#define SORTTEST_H_

void initTestArray(int tab[], int n, int dlugoscPerm);
void howFast(void (*sort)(int*, int), const int ileTestow, const int ileLiczb,
        const int dlugoscLiczb, double wynik[3]);
void howFastQ(
        void (*sort)(void *, size_t, size_t,
                int (*comparator)(const void *, const void *)),
        const int ileTestow, const int ileLiczb, const int dlugoscLiczb,
        double wynik[]);
bool isSorted(double tab[], double sortedTab[], int n);
int randN(int n);

int cmpfunc(const void * a, const void * b);

#endif /* SORTTEST_H_ */ 
 #include <stdio.h>
#include <stdlib.h>
#include "SortTest.h"

void sort(int tab[], int n);

int main(void) {
    double tab[3];
    howFastQ(qsort, 100, 5000, 1000, tab);
    printf("%f\n", tab[0]);
    printf("%f\n", tab[1]);
    printf("%f\n", tab[2]);
    howFast(sort, 100, 5000, 1000, tab);
    printf("%f\n", tab[0]);
    printf("%f\n", tab[1]);
    printf("%f\n", tab[2]);
    return EXIT_SUCCESS;
}

void sort(int tab[], int n) {
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            if (tab[i] < tab[j]) {
                int a = tab[i];
                tab[i] = tab[j];
                tab[j] = a;
            }
        }
    }
}

EDIT: Drobne zmiany w kodzie...

EDIT 2: Błędem było sizeof(double) przy tablicy int..... solved :D