PROGRAM ASSIG_5_SOL
! This program contains a SUBROUTINE which implements Selection
! Sort using MAXVAL and MAXLOC and also it returns the original
! indices.
IMPLICIT NONE
INTEGER :: N
REAL, DIMENSION(:), ALLOCATABLE :: A
INTEGER, DIMENSION(:), ALLOCATABLE :: B
! Now read the dimension of A. Indices start at 1.
PRINT *, "Enter size of A:"
READ *, N
! Now allocate memory for A and B.
ALLOCATE(A(N), B(N))
! Now read elements of A.
PRINT *, "Enter elements of A:"
READ *, A
CALL NEW_SEL_SORT(A,B)
PRINT *, "Sorted Array: "
PRINT *, A
PRINT *, "Original Indices:"
PRINT *, B
! Now free memory allocated for A and B.
DEALLOCATE(A, B)
CONTAINS
SUBROUTINE NEW_SEL_SORT(A,B)
REAL, DIMENSION(:), INTENT(INOUT) :: A
INTEGER, DIMENSION(:), INTENT(OUT) :: B
INTEGER, DIMENSION(1) :: LOC_ARRAY
INTEGER :: N, MAX_LOC, TMP
REAL :: MAX_ELEM, I
N=SIZE(A)
DO I=1, N
B(I)=I
END DO
DO I=N, 2, -1
MAX_ELEM=MAXVAL(A(1:I))
LOC_ARRAY=MAXLOC(A(1:I))
MAX_LOC=LOC_ARRAY(1)
A(MAX_LOC)=A(I)
A(I)=MAX_ELEM
TMP=B(MAX_LOC)
B(MAX_LOC)=B(I)
B(I)=TMP
END DO
END SUBROUTINE NEW_SEL_SORT
END PROGRAM ASSIG_5_SOL