Сортировка кучей (HeapSort) с бинарными данными
В первых четырёх байтах input файла записано ? — количество чисел в массиве ?. Далее идет содержимое массива ? [<=500 000]. Нужно через сортировку кучей heapsort отсортировать массив, и записать в output. Вроде что-то сортируется, но ужасно. Подскажите пожалуйста ошибки: { '''
#include <stdio.h>
void heapify(unsigned int a[], unsigned int n, int root) {
unsigned int largest = root;
unsigned int l = 2 * root + 1; //left
unsigned int r = 2 * root + 2; //right
if (l < n && a[l] > a[largest])
largest = l;
if (r < n && a[r] > a[largest])
largest = r;
if (largest != root) {
int temp = a[root];
a[root] = a[largest];
a[largest] = temp;
}
}
void heapSort(unsigned int a[], unsigned int len) {
// Build heap
for (int w = len / 2 - 1; w >= 0; w--)
heapify(a, len, w);
for (int w = len - 1; w > 0; w--) {
// Move current root to end
unsigned int temp = a[0];
a[0] = a[w];
a[w] = temp;
heapify(a, w, 0);
}
}
int main(){
FILE* insider = fopen("imp.txt", "rb");
FILE* outsider = fopen("oum.txt", "wb");
unsigned int n;
fread(&n, sizeof(n), 1, insider); //first 4 bytes
unsigned int a[500000];
for(int u = 0; u < n; u++)
{
fread(&a[u], sizeof(n), 1, insider);
if (a[u] == NULL) break;
}
unsigned lenght = sizeof(a) / sizeof(a[0]);
heapSort(a, lenght);
for (int u = 0; u < n; u++) {
fwrite(&a[u], sizeof(a), 1, outsider);
if (a[u] == NULL) break;
}
return 0;
}
''' }