ALLOCATABLEでやると、記憶領域の開放を自動でやってくれるのでやや楽だと思います。
必要なコンパイラ・オプションは
/assume:realloc_lhs
/heap-arrays100000
です。
Intel掲示板によると、来週早々にもIntelFortranの新しいupdateが出るようです。
■ソース・プログラム
MODULE m_sort IMPLICIT NONE CONTAINS ! RECURSIVE PURE FUNCTION qsort(x) RESULT(res) REAL, INTENT(IN) :: x(:) REAL, ALLOCATABLE :: res(:) IF (SIZE(x) <= 1) THEN res = x ELSE res = [ qsort( PACK(x(2:), x(2:) < x(1)) ), x(1), qsort( PACK(x(2:), x(2:) >= x(1)) ) ] END IF RETURN END FUNCTION qsort ! END MODULE m_sort !======================================================== PROGRAM sort USE m_sort IMPLICIT NONE REAL, ALLOCATABLE :: x(:), y(:) REAL(8) :: t0, t1 INTEGER :: i CALL RANDOM_SEED() DO i = 0, 8 ALLOCATE( x(10**i) ) CALL RANDOM_NUMBER(x) CALL CPU_TIME(t0) y = qsort(x) CALL CPU_TIME(t1) PRINT *, i, 10**i, t1 - t0 DEALLOCATE( x, y ) END DO STOP END PROGRAM sort