! Program for sorting 500 or less numbers ! Written by siva@cse.iitb.ernet.in, Aug 7, 2000 ! This file uses the naive "bubble" sort approach that ! makes repeated passes through the array pushing the ! biggest number to the bottom Program mysort ! declare the array for reading input. assumed size < 500 Integer, dimension(500) :: marks Integer :: size ! some variables to use as counters when looping Integer :: i,j ! count how many swaps Integer :: nswap nswap = 0 !first read in size and marks Read (*,*) size If ((size > 500)) Then Write (*,*) "Sorry we handle max of 500 numbers" Stop End If write (*,*) "reading ", size, " numbers." DO i = 1, size Read (*,*) marks(i) End Do write(*,*) "Have Read in ", size, " numbers. Thanks." !keep going through the array and exchanging any out of !order elements until no exchange is possible. j = size outer: DO if (j == 1) EXIT ! now go through the array pushing biggest number to bottom inner: Do i = 1, j - 1 if ((marks(i) > marks(j))) Then ! swap the marks tmp = marks(j) marks(j) = marks(i) marks(i) = tmp nswap = nswap + 1 end if End Do inner ! now marks(j) is bigger than all above. repeat for next j j = j - 1 End Do outer ! when we reach here it is sorted. print it out DO i = 1, size Write (*,*) marks(i) End Do Write (*,*) "This needed ", nswap, " swaps to sort the array." End Program mysort