No pokud bude operace swap netrivialni muzu ji vytahnout stejnym zpusobem vne "sortu" jako "compare" a fungovat to bude pro cokoliv otazkou je jestli to jeste bude optimalni .. (vzdy je to kompormis mezi rychlosti a lenosti)
Ano, pokud ti k celýmu sortu stačí jenom swap, tak se to ještě dá. Pokud ale budeš potřebovat vkládat kamkoli, tak už to přestává být zajímavý - a dostáváš se přesně do toho bodu, kdy snaha o sjednocení udělá víc škody než užitku. Pak už je prostě jednodušší napsat sort_struktura1, sort_strutkura2, ... a nějakým způsobem je (když už) sjednotit, aby se při volání sort(...) zavolala ta správná funkce pro danou strukturu. Bonus pak je, že můžeš jednotlivý funkce parádně optimalizaovat na míru.
On je to obecný "filosofický" problém - takový ten klasický "OOP polymorfismus" vždycky nějakým způsobem využívá princip "nejmenšího společného jmenovatele", čili když se to implementuje neuváženě, vede to jenom ke zpkriplení struktur, který by jinak byly super