Die Schwartzsche Transformation ist ok, aber anstelle von crypt würde ich rand verwenden.
Mit crypt ist das Mischen idempotent, d.h. "nochmal mischen" ändert die Reihenfolge nicht mehr.
Wenn ein Wert im Eingangsarray mehrfach vorkommt (genauer: Die gleiche String-Repräsentation hat), dann stehen die alle im gemischten Array direkt hintereinander.