Вы можете просто взглянуть на конец zsteqr.f (эрмитовский тридигаональный решатель) и обобщить это. Соответствующий бит кода
* Use Selection Sort to minimize swaps of eigenvectors
*
DO 180 II = 2, N
I = II - 1
K = I
P = D( I )
DO 170 J = II, N
IF( D( J ).LT.P ) THEN
K = J
P = D( J )
END IF
170 CONTINUE
IF( K.NE.I ) THEN
D( K ) = D( I )
D( I ) = P
CALL ZSWAP( N, Z( 1, I ), 1, Z( 1, K ), 1 )
END IF
180 CONTINUE
Так что я думаю, вам просто нужно изменить строку сравнения (но не проверено)
Ian