Shell sort (Fortran95)

From LiteratePrograms

Jump to: navigation, search
Other implementations: C | Fortran95

This program is a code dump.
Code dumps are articles with little or no documentation or rearrangement of code. Please help to turn it into a literate program. Also make sure that the source of this code does consent to release it under the MIT or public domain license.

<<Shellsort.f95>>=

MODULE sort

CONTAINS

SUBROUTINE Shell_Sort(a)

    IMPLICIT NONE
    INTEGER :: i, j, gap
    REAL :: temp
    REAL, INTENT(IN OUT) :: a(:)

    gap = SIZE(a) / 2
    DO WHILE (gap>0)
	DO i = gap+1, SIZE(a)
           j = i - 1
	   temp = a(i)
              DO WHILE (j >= gap .AND. a(j-gap+1) > temp)
		 a(j+1) = a(j-gap+1)
	         j = j - gap
              END DO
              a(j+1) = temp
	END DO
        IF (gap == 2) THEN
           gap = 1
        ELSE
           gap = gap * 5 / 11
        END IF
    END DO
 
END SUBROUTINE Shell_Sort
END MODULE sort
  
PROGRAM SHELLSORT

    USE sort

    IMPLICIT NONE
    REAL :: array(100)
    
    CALL RANDOM_SEED
    CALL RANDOM_NUMBER(array)
    
    WRITE (*,*) "Unsorted array"    
    WRITE (*,*) array
    WRITE (*,*)
    
    CALL Shell_Sort(array)

    WRITE (*,*) "Sorted array"
    WRITE (*,*) array
    
END PROGRAM SHELLSORT

Download code
Personal tools