insertion sort(T a[], n)
for i = 1 to n - 1
T x = a[i]
gap = i
while gap > 0 and a[gap - 1] > x
gap--
memcpy(a + gap, a + gap + 1, sizeof(T)*(i - gap))
a[gap] = x
However, block copying data can cause havoc if the data aren’t set up properly; if, for example, the data are C++ class instances containing a smart-pointer instance variable.