! Program for sorting 500 or less numbers ! Written by siva@cse.iitb.ernet.in, Aug 7, 2000 ! This file uses a variation of the "bubble" sort approach. ! It makes repeated passes through the array exchanging ! marks[i] and marks [i + 1] if they are out of order. ! until no more exchanges are possible. Program mysort ! declare the array for reading input. assumed size < 500 Integer, dimension(500) :: marks Integer :: size ! the flag that checks if any swaps are made Logical :: swapflag ! a variable to use as counter when looping Integer :: i ! another to count how many swaps are done Integer :: 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. outer: DO !initialize swapflag to fasle swapflag = .false. ! now go through the array seeing if any swap is needed. inner: Do i = 1, size - 1 if ((marks(i) > marks(i+1))) Then ! swap the marks tmp = marks(i+1) marks(i+1) = marks(i) marks(i) = tmp nswap = nswap + 1 ! since we have swapped, we set swapflag to true swapflag = .true. end if End Do inner ! if no swaps were needed, then array is in sorted order. if (.NOT. swapflag) EXIT End Do outer ! now it is sorted. print it out DO i = 1, size Write (*,*) marks(i) End Do Write (*,*) " This needed ", nswap, " swaps to sort." End Program mysort