next up previous
Next: Assignments Up: Sample Programs Previous: Sort-1

Sort-2

      program SortData_2
      Implicit None
      Integer N
      Real Grades(1000)

C             Open Files

      Open(unit=1,file='data.in',type='old')
      Open(unit=2,file='data.out2',type='unknown')

      Call GetData(Grades, N)
      Call SelectSort(Grades, N)
      Call WriteFile(Grades, N)
      end

C------------------------GetData-------------------------------------

      Subroutine GetData(Grade, Num_Grades)
C
C Get the input data from the prespecified file
C Return an array of grades and the number of elements in the array
C
      Implicit none
      Integer i, Num_Grades
      Real Grade(1)

      Do i = 1, 1000000
         read(1,*,end=10) Grade(i)
      end do
   10 Num_Grades = i - 1
      return
      end

C------------------------SelectSort-------------------------------------

      Subroutine SelectSort(Elements, Num_Elements)
C
C Sort an array of real values (Elements) by selection sort
C Return the elements sorted into increasing order
C
      Implicit none
      Integer i, j
      Integer  Num_Elements, Position
      Real Elements(1), Small, temp

      Do i = 1 , Num_Elements - 1        ! start outer loop
         Small = Elements(i)             ! assume current element is smallest
         Position = i
         Do j = i+1, Num_Elements             ! consider remainder of array
            If (Elements(j) .LT. Small) Then  ! check if current element
               Small = Elements(j)            ! is smaller than the smallest
               Position = j                   ! found thusfar
            end if
         end do 
         temp = Elements(Position)           ! switch smallest element
         Elements(Position) = Elements(i)    ! with current element
         Elements(i) = temp
      end do
      return
      end

C------------------------WriteFile-------------------------------------

      Subroutine WriteFile(Elements, Num_Elements)
C
C  Write the final sorted array out to a different file
C
      Implicit none
      Integer i, Num_Elements
      Real Elements(1)

      Do i = 1,Num_Elements
         write(2,*) Elements(i)
      end do
      return
      end



Russ Miller
Thu Sep 14 13:56:19 EDT 1995