With insertion sorting, we add the items to a list, keeping the list in order.
Each pass, choose an arbitrary unsorted element and add it to the correct place in the sorted list.

Insertion sort has a couple of advantages over selection sort;

We always have a sorted list that grows with time.
This typically means there is a method to add an element, and it can be called at any time.
Handy if you're doing something like adding players to a roster.

Finding the correct place in a sorted list can potentially done with binary search.
This might reduce time to O(N log N) time.

Unfortunately, inserting an element into the middle of a sorted list usually takes O(N) time,
because you need to move half the elements over 1 place.
So it takes fewer compares, but more moves.
Inserting into a linked list is easier,
but finding the correct place to insert an item into a linked list is harder, typically O(N)

There are many tweaks that can improve performance of insertion sorting.
But fundamentally insertion sorting is an O(N^{2}) sort.
This is because either finding the place to insert an element is O(N),
or making room for the element is O(N), and you must do one or the other N times.