We were given some pseudo-code which uses the idea that we start from the left and right and simultaneously switch elements using two loops excited together.
integer function partition_data( xdata, xmiddle ) implicit none real, dimension(:) :: xdata real :: xmiddle !INTENT? integer :: l = 1 integer :: r = 16 real :: temp do if (xdata(l) < xmiddle) then if (l == r) then partition_data = l exit end if l = l + 1 else do if (xdata(r) >= xmiddle) then if (l == r) then partition_data = l - 1 exit end if r = r - 1 else temp = xdata(l) xdata(l) = xdata(r) xdata(r) = temp exit end if end do end if end do end function partition_data
With the xdata array
xdata = (/ 0.00392, 0.0251, 0.453, 0.667, 0.963, 0.838, 0.335, 0.975, &
0.796, 0.833, 0.345, 0.871, 0.0899, 0.888, 0.701, 0.735 /)
The xmiddle was set to 0.5 in the main test program.
When I compile, I seem to get an infinite loop and I cannot find where it is.
If anyone can spot where I went wrong, that would be great.
Thanks in advance!