Си.В 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;
}
