46 lines
969 B
Fortran
46 lines
969 B
Fortran
SUBROUTINE hunt(xx,n,x,jlo)
|
|
INTEGER jlo,n
|
|
REAL x,xx(n)
|
|
INTEGER inc,jhi,jm
|
|
LOGICAL ascnd
|
|
ascnd=xx(n).ge.xx(1)
|
|
if(jlo.le.0.or.jlo.gt.n)then
|
|
jlo=0
|
|
jhi=n+1
|
|
goto 3
|
|
endif
|
|
inc=1
|
|
if(x.ge.xx(jlo).eqv.ascnd)then
|
|
1 jhi=jlo+inc
|
|
if(jhi.gt.n)then
|
|
jhi=n+1
|
|
else if(x.ge.xx(jhi).eqv.ascnd)then
|
|
jlo=jhi
|
|
inc=inc+inc
|
|
goto 1
|
|
endif
|
|
else
|
|
jhi=jlo
|
|
2 jlo=jhi-inc
|
|
if(jlo.lt.1)then
|
|
jlo=0
|
|
else if(x.lt.xx(jlo).eqv.ascnd)then
|
|
jhi=jlo
|
|
inc=inc+inc
|
|
goto 2
|
|
endif
|
|
endif
|
|
3 if(jhi-jlo.eq.1)then
|
|
if(x.eq.xx(n))jlo=n-1
|
|
if(x.eq.xx(1))jlo=1
|
|
return
|
|
endif
|
|
jm=(jhi+jlo)/2
|
|
if(x.ge.xx(jm).eqv.ascnd)then
|
|
jlo=jm
|
|
else
|
|
jhi=jm
|
|
endif
|
|
goto 3
|
|
END
|