Escrita e Leitura para Ficheiro

Boa tarde,
Foi-me proposto um exercício em que o Enunciado é:
Implementar um programa que,
a) Construa um vetor com N elementos do tipo inteiro, para o ficheiro
“Inteiros.AED”;
b) Ordene o vetor por ordem decrescente (usando o algoritmo Bubble Sort);
c) Mostre no ecrã os elementos do vetor ordenado;
d) Determine e mostre no ecrã o maior e menor valores do vetor, usando apenas
instruções de atribuição

Não estou é a entender o que estou a fazer de mal em relação a como é que eu hei-de passar o vetor ordenado em diferentes formas para o ficheiro.
Agradecia ajuda!

Exercício:

    #include <stdio.h>
	#include <locale.h>
	#include "VetorInteiros"
	
	void MaiorMenor(int *V, int N){
		int i, maior = 0, menor = 0;
		
		for(i=0;i<N;i++){
            if(V[i]>maior){
                maior=V[i];
            }
        }
    	printf("O maior valor é %d", maior);
    	
		menor = V[0];
		
	    for (i = 1; i < N; i++){
	        if (V[i] < menor)
	            menor = V[i];
	    }
    	printf("\n e o menor valor é %d", menor);
	}
	
	// mostrar os elementos do vetor numa só linha do monitor
	void MostrarVetor (int *V, int N){
		
		int k;
		for (k = 0; k < N; k++)
			printf("%d  ", V[k]);
	    
	}
	
	// Seleção - Ordena por ordem decrescente
	void OrdenarSelecao_Decrescente (int *V, int N){
		int k, kk, pos_menor, aux;
		for (k = 0; k < N-1; k++){
			pos_menor = k;
			for (kk = k+1; kk < N; kk++)
				if (V[kk] > V[pos_menor])
				pos_menor = kk;
			if (pos_menor != k){
				aux = V[k];
				V[k] = V[pos_menor];
				V[pos_menor] = aux;
				}
		}
	}
	
	// Bubblesort - ordena por ordem decrescente
	void Bubblesort_Dec (int *V, int N){
		int  k, l, fim, aux;
		fim = N-1;
		do{
			l = 0;
			for (k = 0; k < fim; k++)
				if (V[k] < V[k+1]){
				    aux = V[k];
				    V[k] = V[k+1];
				    V[k+1] = aux;
				    l = k;
				}
			fim = l;
		} while (l != 0);
	}
	
	void swap(int *xp, int *yp)
	{
		int temp = *xp;
		*xp = *yp;
		*yp = temp;
	}
	
	void selectionSort(int *V, int N)
	{
		int i, j, min_idx;
	
		for (i = 0; i < N-1; i++){
			min_idx = i;
			for (j = i+1; j < N; j++)
				if (V[j] < V[min_idx])
					min_idx = j;
				swap(&V[min_idx], &V[i]);
		}
	}

	
	int main(){
		
		setlocale(LC_ALL, "Portuguese");
		
		int V[] = {12, 8, 6, 10, 23, 14};
		
	    int tamanho = sizeof(V) / sizeof(int);
	
	    printf("Vetor antes da ordenação: \n");
	    MostrarVetor(V, tamanho);
	    printf("\n");
	    
	    printf("Vetor com ordenação decrescente normal: \n");
	    OrdenarSelecao_Decrescente(V, tamanho);
	    MostrarVetor(V, tamanho);
	    printf("\n");
	
	    printf("Vetor com ordenação BubbleSort: \n");
	    Bubblesort_Dec(V, tamanho);
	    MostrarVetor(V, tamanho);
	    printf("\n");
	    
	    selectionSort(V, tamanho);
		printf("Vetor com Selection Sort: \n");
		MostrarVetor(V, tamanho);
	    printf("\n");
	    MaiorMenor(V, tamanho);
	    
	    return 0;
		
	}

VetorInteiros.h:
#include <stdio.h>
#include <stdlib.h>

	int *LerVector (const char *fich, int *N){
		int *V, k, aux;
		FILE *f;
		    
		f = fopen("Inteiros.AED", "r");
		if (f == NULL)
			return NULL;
		V = (int *) malloc(sizeof(int));
		if (V == NULL)
			return NULL;
		*N = 0;
		while (fscanf(f, "%d", &aux) == 1){
			*N = *N + 1;
			V = (int *) realloc(V, (*N)*sizeof(int));
			if (V == NULL)
				return NULL;
			V[*N-1] = aux;
		}
		fclose(f);
		return V;
	}