L = (N2-N1+1)/2+N1 IR = N2 10 if (L .gt. N1) then L = L-1 RRA = RA(L) RRB = RB(L) else RRA = RA(IR) RRB = RB(IR) RA(IR) = RA(N1) RB(IR) = RB(N1) IR = max(N1,IR-1) ! 'max' needed to sort one element (N1=N2) if (IR .eq. N1) then RA(N1) = RRA RB(N1) = RRB return end if end if I = L J = L+L-N1+1 do while (J .le. IR) if (J .lt. IR) then if (RA(J) .lt. RA(J+1)) J=J+1 end if if (RRA .lt. RA(J)) then RA(I) = RA(J) RB(I) = RB(J) I = J J = J+J-N1+1 else J = IR+1 end if end do RA(I) = RRA RB(I) = RRB go to 10