>>687
MODULE m_sort
IMPLICIT NONE
CONTAINS
RECURSIVE FUNCTION iqsort( idat ) RESULT( isorted )
IMPLICIT NONE
INTEGER, INTENT(IN) :: idat(:)
INTEGER :: isorted( SIZE(idat) )
IF ( SIZE(idat) > 1 ) THEN
isorted = (/ iqsort( PACK( idat(2:), idat(2:) > idat(1) ) ), &
idat(1), &
iqsort( PACK( idat(2:), idat(2:) <= idat(1) ) ) /)
ELSE
isorted = idat
END IF
RETURN
END FUNCTION iqsort
END MODULE m_sort
!===============================================================
PROGRAM sort
USE m_sort
IMPLICIT NONE
INTEGER :: m(5)
READ *, m
PRINT *, iqsort(m)
STOP
END PROGRAM sort