Narayanův algoritmus je nerekurzivní algoritmus , který pro danou permutaci generuje permutaci, která po ní následuje (v lexikografickém pořadí ). Vynalezen indickým matematikem Panditem Narayanou ve 14. století .
Pokud je Narayanův algoritmus aplikován ve smyčce na počáteční sekvenci prvků uspořádaných tak, že , vygeneruje všechny permutace prvků sady v lexikografickém pořadí.
Dalším rysem algoritmu je, že je nutné si pamatovat pouze jeden prvek permutace.
V případě permutace, kde jsou prvky náhodně zamíchány, je složitost algoritmu prakticky nezávislá na počtu prvků. V daných implementacích jsou provedena průměrně 3 porovnání permutačních prvků a 2,17 výměn.
Nejlepší případ je, když je předposlední prvek permutace větší než poslední, pak se provedou 2 srovnání a 1 výměna. Nejhorší případ je, když jsou prvky permutace seřazeny sestupně, a pokud je délka permutace n, pak se provede n+1 porovnání a n/2+1 výměn.
Obecně lze složitost algoritmu odhadnout jako O(n).