Си.В dev c++ программа завершается досрочно.В онлайн компиляторах нет проблем

Пирамидальная сортировка.Я хочу создать экселевский файл с данными по сортировке на 100, 200 элементах и т.д. При этом во вторую колонку выводится среднее значение суммы перестановок и сравнений от 5 проходов на n-ом наборе.

Проблема в том, что моя программа завершается досрочно в dev c++.Т.е. у меня создается пустой файл.При этом другие компиляторы выводят результат.В чем ошибка?Статистику прошлых сортировок всё выводил в файлы, спокойно.Но что с этой не так понять не могу. Работает ли у вас программа?

Вот.В первом же онлайн компиляторе всё вывелось -

введите сюда описание изображения

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
unsigned comparisons = 0, swaps = 0;
 
int lessthan(int a, int b) {
    comparisons++;
    return (a < b);
}
 
void swap(int *a, int *b) {
    swaps++;
    int tmp = *a; *a = *b; *b = tmp;
}
 
void keyDown(int *arr, int n, int head) {
    int j;
    if (lessthan(2*head + 2, n) && lessthan(arr[2*head + 1], arr[2*head + 2])) {
        j = 2*head + 2; 
    } else {
        j = 2*head + 1;
    }
    while (lessthan(arr[head], arr[j]) && lessthan(head, n / 2)) {
        swap(arr + head, arr + j);
 
        head = j;
        if (lessthan(2*head + 2, n) && lessthan(arr[2*head + 1], arr[2*head + 2])) {
            j = 2*head + 2; 
        } else {
            j = 2*head + 1;
        }
    }
}
 
void heapSort(int *arr, int n) {  
    int i;
    for (i = n/2 - 1; lessthan(-1, i); i--) { 
        keyDown(arr, n, i);
    }
    int l = n;
    while (lessthan(1, l)) {                   
        l--;
        swap(&arr[l], &arr[0]);
        keyDown(arr, l, 0);
    }
}
 
int main(void) {
    FILE *f = fopen("stat156.csv", "w");//stdout;
    int n = 100;
    srand(time(NULL));        
    while (n <= 10000) {
        comparisons = swaps = 0;   
        int t, s;                            
        for ( t = 0; t < 5; t++) {
            int *arr;
            arr = malloc(n * sizeof *arr);  
            for ( s = 0; s < n; s++) {
                arr[s] = rand() % 50;
            }
            heapSort(arr, n);
            free(arr);
        }
        int st = (comparisons + swaps) / 5;
        fprintf(f, "%d ; %d\n", n, st);
        if (n < 1000) {
            n += 100;
        } else {
            n += 1000;
        }   
    }
    
    fclose(f);
    
    return 0;
}

Ответы (0 шт):