#Small nitpicks - The for loop can be started from 1, as the iteration with 0 doesn't actually do anything. - Prefer to reduce the scope of variables if possible. This allows better reasoning for the compiler/optimizer, and makes the code more readable because the variable declaration is nearer to the actual usage. - The check `arr[index_sorted] >= 0` in the while loop should probably be `index_sorted >= 0u` (after all, `Element` might not be comparable to integers), but this is `true` in all cases (`-1` for an unsigned integer type is equal to that type's maximum value). However, even checking this becomes unnecessary if the first iteration starts at 1. <br/> template<typename Element> void insertion_sort(Element arr[], size_t size) { for (auto index = 1u; index < size; ++index) { auto temp = arr[index]; auto index_sorted = index - 1; while (arr[index_sorted] > temp) { arr[index_sorted + 1] = arr[index_sorted--]; } arr[index_sorted + 1] = temp; } }