Remplazanso el que ha salido, por el último y reduciendo el bucle...
array chr
char c
entero j, k
Bucle para k desde 5 hasta 1 retrocediendo
j = random(ente 0 y k)
c = chr(n)
imprimir c
// ´de aquí para arriba lo que tienes
// de aquí para bajo, el remplazo...
chr(j)= chr(k)
chr(k) = c
fin bucle
imprimir chr
Al inicio tienes DANIEL
Al empezar se elige entre 0 y 5, supongamos que sale el 2 (la 'N')
la imprimes, luego la remplazas por el carácter en ese ciclo ( el máximo elegible)
entonces ahora te queda: DALIE'N
y ahora en el siguiente ciclo ( el 4) eliges entre 0 y 4, luego ya no sale repetido la 'N', aunque sí salga repetido el valor 2, pero ahora su contenido es otro...
supongamos que ahora sale el 0... la 'D'... se remplaza por el último valor visitable (como estamso en el ciclo 4, el carácter en ese índice es la 'E'
ahora queda así: EALI'DN el apóstrofo es para indicar la separación entre los elegibles y los ya elegidos en ciclos pasados.
ahora en el cilo 3 toca elegir entre 0 y3, supongamos que sal eel 2, la letra 'L'
nuevamente la remplazamos por la última elegible (la 3), la I
ahora nos queda así: EAI'LDN
toca el ciclo 2, supongmaos que sale el 1, letra A
hacmeos el intercambio la que sale por la última elegible del ciclo, A por I,
ahora nos queda así: EI'ALDN
toca el cliclo 1, pongamos que sale el 0, la 'E'
remplazamos el que sale por el último elegible, la E por la I
finalmente nos queda así: I'EALDN
es estéril elegir para el bucle 0, no hay elección si solo se puede elegir, 1, por eso el bucle acaba en el 1 y no en el 0.
El array al final contiene: IEALDN, exactamente están en orden inverso a como han salido, luego estamos reusando el mismo array de la entrada para la salida (si esto es aceptable, si no debe hacerse copia del array en la entrada, mejor en la llamada).
-----------------------
Dejo a tu esfuerzo y capacidad, modificar el pseudocódigo, para que al final del bucle (sin ninguna operación posterior) te quede el array ordenado correctamente en el mismo orden en que han ido saliendo...