Вот описание того, как это работает:
remove the first element
get all permutations of the remaining elements (recursively)
for each position in each permutation
insert the first element at that position in that permutation
Используя пример
permutations of [a, b, c]
remove a
permutations of [b, c]
remove b
permutations of [c]
remove c
permutations of []
= [[]]
for each, insert c in each position
=[[c]]
for each, insert b in each position
=[[b,c], [c,b]]
for each, insert a in each position
= [[a,b,c], [a,c,b], [b,a,c], [c,a,b], [b,c,a], [c,b,a]]
Для расчета перестановок для n элементов требуется вычисление перестановок для n-1 элементов (рекурсивный вызов), а затем их обработка n раз (вставки). То же самое верно для n-1 и так далее до 0, что требует постоянного времени (1). Следовательно, O - это n * n-1 * n-2 ... 1 или n!.