Hi, I am writing a function that takes in a real data array and a key partition value, which will rearrange the array so that elements with a lower value than x are placed before the elements with values >= the partition value. It then returns the index of the last element of the array with a value less than the partition value. 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. CODE Code (Text): 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!