Al di la dell'algoritmo che vuoi utilizzare e del funzionamento o meno della relativa implementazione, stai facendo un gran pasticcio nella suddivisione in sottoproblemi.
La funzione separa() sostanzialmente fa tutto, ovvero il caricamento dei dati e il loro ordinamento; inoltre nel main() questi dati vengono caricati da disco, quali dati vuoi utilizzare???
Ti suggerisco di ripartire da zero, implementando tre funzioni
a) carica_dati() che carica il vettore da disco, da inserimento utente oppure anche con un vettore fisso (per debugare); la funzione deve ritornare il numero di elementi effettivamente caricati
b) la funzione separa() che esegue il procedimento, e che come primo step potresti decidere di non farle fare niente
c) una stampa_dati() che riceve il vettore e il numero di elementi e li stampa a video
Il main() deve risultare qualcosa del tipo
int vettore[MAX];
int ndati;
ndati=carica_dati(vettore,MAX);
separa(vettore,ndati);
stampa(vettore,ndati);
Compilando ed eseguendo il programma dovresti ottenere la stampa dei dati caricati; ottenuto ciò puoi pensare di andare avanti, diversamente no.