2015-05-27 09:08:28 -04:00
|
|
|
subroutine indexx(arr,n,indx)
|
|
|
|
|
|
|
|
parameter (M=7,NSTACK=50)
|
|
|
|
integer n,indx(n)
|
2015-11-17 20:28:12 -05:00
|
|
|
real arr(n)
|
2015-05-27 09:08:28 -04:00
|
|
|
integer i,indxt,ir,itemp,j,jstack,k,l,istack(NSTACK)
|
|
|
|
real a
|
|
|
|
|
|
|
|
do j=1,n
|
|
|
|
indx(j)=j
|
2013-05-22 11:39:28 -04:00
|
|
|
enddo
|
|
|
|
|
2015-05-27 09:08:28 -04:00
|
|
|
jstack=0
|
|
|
|
l=1
|
|
|
|
ir=n
|
|
|
|
1 if(ir-l.lt.M) then
|
|
|
|
do j=l+1,ir
|
|
|
|
indxt=indx(j)
|
|
|
|
a=arr(indxt)
|
|
|
|
do i=j-1,1,-1
|
|
|
|
if(arr(indx(i)).le.a) goto 2
|
|
|
|
indx(i+1)=indx(i)
|
|
|
|
enddo
|
|
|
|
i=0
|
|
|
|
2 indx(i+1)=indxt
|
|
|
|
enddo
|
|
|
|
if(jstack.eq.0) return
|
|
|
|
|
|
|
|
ir=istack(jstack)
|
|
|
|
l=istack(jstack-1)
|
|
|
|
jstack=jstack-2
|
|
|
|
|
|
|
|
else
|
|
|
|
k=(l+ir)/2
|
|
|
|
itemp=indx(k)
|
|
|
|
indx(k)=indx(l+1)
|
|
|
|
indx(l+1)=itemp
|
|
|
|
|
|
|
|
if(arr(indx(l+1)).gt.arr(indx(ir))) then
|
|
|
|
itemp=indx(l+1)
|
|
|
|
indx(l+1)=indx(ir)
|
|
|
|
indx(ir)=itemp
|
|
|
|
endif
|
|
|
|
|
|
|
|
if(arr(indx(l)).gt.arr(indx(ir))) then
|
|
|
|
itemp=indx(l)
|
|
|
|
indx(l)=indx(ir)
|
|
|
|
indx(ir)=itemp
|
|
|
|
endif
|
|
|
|
|
|
|
|
if(arr(indx(l+1)).gt.arr(indx(l))) then
|
|
|
|
itemp=indx(l+1)
|
|
|
|
indx(l+1)=indx(l)
|
|
|
|
indx(l)=itemp
|
|
|
|
endif
|
|
|
|
|
|
|
|
i=l+1
|
|
|
|
j=ir
|
|
|
|
indxt=indx(l)
|
|
|
|
a=arr(indxt)
|
|
|
|
3 continue
|
|
|
|
i=i+1
|
|
|
|
if(arr(indx(i)).lt.a) goto 3
|
|
|
|
|
|
|
|
4 continue
|
|
|
|
j=j-1
|
|
|
|
if(arr(indx(j)).gt.a) goto 4
|
|
|
|
if(j.lt.i) goto 5
|
|
|
|
itemp=indx(i)
|
|
|
|
indx(i)=indx(j)
|
|
|
|
indx(j)=itemp
|
|
|
|
goto 3
|
|
|
|
|
|
|
|
5 indx(l)=indx(j)
|
|
|
|
indx(j)=indxt
|
|
|
|
jstack=jstack+2
|
|
|
|
if(jstack.gt.NSTACK) stop 'NSTACK too small in indexx'
|
|
|
|
if(ir-i+1.ge.j-l)then
|
|
|
|
istack(jstack)=ir
|
|
|
|
istack(jstack-1)=i
|
|
|
|
ir=j-1
|
|
|
|
else
|
|
|
|
istack(jstack)=j-1
|
|
|
|
istack(jstack-1)=l
|
|
|
|
l=i
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
goto 1
|
|
|
|
|
2013-05-22 11:39:28 -04:00
|
|
|
end subroutine indexx
|
|
|
|
|