Ваше решение не совсем то, что утверждает алгоритм.Вы можете не использовать два вложенных цикла for:
void insertionsort(int a[], int n){
int i, key, j;
for (i = 1; i < n; i++)
{
key = a[i];
j = i-1;
/*
Move all elements in the array at index 0 to i-1, that are
greater than the key element, one position to the right
of their current position
*/
while (j >= 0 && a[j] > key)
{
a[j+1] = a[j];
j = j-1;
}
a[j+1] = key;
}
}