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

void insertion_sort(int *, int);

int main()
{
    int i, n, *myArray;

    printf("\nQuanti elementi vuoi inserire nell'array ?: ");
    scanf("%d", &n);
    
    myArray = (int *) malloc (n*sizeof(int));

    for(i = 0; i < n; i++)
    {
        printf("Inserisci il %d elemento dell'array: ", i+1);
        scanf("%d", &myArray[i]);
    }

    for(i = 0; i < n; i++)
        printf("%d ", myArray[i]);
	
    printf("\n\n");

    insertion_sort(myArray, n);

    for(i = 0; i < n; i++)
	printf("%d ", myArray[i]);
	
    getch();

    free(myArray);

    return 0;	
}


void insertion_sort(int *array, int n)
{
    int i, j, temp;

    for(i = 1; i < n; i++)
    {
        temp = (array[i]);
	j = i - 1;

	while((j >= 0) && (temp < array[j]))
        {
	    (array[j+1]) = (array[j]);
	    j--;
	}

	(array[j+1]) = temp;
    }		
}
*a cosa serve nr = 10?
*perchè allochi la memoria 2 volte?
*perchè fai iterare (con for) fino a 10 (nr) supponendo di avere un array composto da 3 elementi (n)?

p.s. l'algoritmo di ordinamento non l'ho controllato
ma così - il programma - dovrebbe fungere...