Buongiorno a tutti!

Per domani devo consegnare un paio di esercizi al prof.. tra questi c'è un algoritmo di insertion sort!
Ho svolto l'esercizio però in alcuni casi mi da' qualche problema... vi riporto quello che ho fatto!
Codice:
#include <stdio.h>
#include <stdlib.h>
/*Prototipo della function*/
int insertion (int *x, int n);
main () {
/*Dichiaro le variabili*/
int *a;
int n;
int i=0;
printf ("Inserisci il numero di locazioni dell'array\n");
scanf ("%d", &n);
/*Allocazione dinamica dell'array*/
a= (int*)malloc(n*sizeof(int));
/*Riempio l'array*/
for (i=0; i<n; i++) {
printf ("Inserisci il valore n.%d\n", i);
scanf ("%d", &a[i]); }
/*Stampo a video l'array*/
for (i=0; i<n; i++) {
printf ("%d) %d\n", i, a[i]); }
/*Chiamo la funzione insertion*/
insertion (a, n);
/*Stampo a video l'array ordinato*/
printf ("Dopo la chiamata alla funzione il tuo array e' ordinato in questo modo:\n\n");
for (i=0; i<n; i++) {
printf ("%d) %d\n", i, a[i]); }
system ("pause");
/*Libero la memoria allocata per l'array*/
free (a);
}
/*Funzione insertion*/
int insertion (int *x, int n) {
int i=0;
int j=0;
int r;
/*Inizio primo ciclo iterativo*/
for (i=2; i<n; i++) {
r=x[i];
j=i;
/*Inizio del secondo ciclo iterativo*/
while (r<x[j-1]) {
x[j]=x[j-1];
j=j-1; }
x[j]= r; }
}
Potreste per favore controllare se c'è qualcosa che non và? A volte quando chiamo la funzione l'array che mi stampa a video ha come primo valore numeri strani, tipo "3498579"!! Grazie infinite