Сортировка кучей (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;
  }

''' }


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