Skip to content

Instantly share code, notes, and snippets.

@nattoheaven
Created February 4, 2014 23:23
Show Gist options
  • Save nattoheaven/8814500 to your computer and use it in GitHub Desktop.
Save nattoheaven/8814500 to your computer and use it in GitHub Desktop.
SUBROUTINE SEARCH1(IDATA,IDX,INPUT,IOUT,N)
IMPLICIT NONE
INTEGER IDATA,IDX,INPUT,IOUT,I,N,IL,IR,IC
DIMENSION IDATA(N),IDX(N),INPUT(N),IOUT(N)
DO 20 I=1,N
IL=1
IR=N
30 IC=(IL+IR)/2
IF(IDATA(IDX(IC)).EQ.INPUT(I))THEN
IOUT(I)=IC
ELSE
IF(IDATA(IDX(IC)).GT.INPUT(I))THEN
IR=IC-1
ELSE
IL=IC+1
END IF
GO TO 30
END IF
20 CONTINUE
C
RETURN
END
C
SUBROUTINE SEARCH2(IDATA,IDX,INPUT,IOUT,N)
IMPLICIT NONE
INTEGER IDATA,IDX,INPUT,IOUT,ITMP,I,N,IL,IR,IC
DIMENSION IDATA(N),IDX(N),INPUT(N),ITMP(N),IOUT(N)
DO 10 I=1,N
ITMP(I)=IDATA(IDX(I))
10 CONTINUE
DO 20 I=1,N
IL=1
IR=N
30 IC=(IL+IR)/2
IF(ITMP(IC).EQ.INPUT(I))THEN
IOUT(I)=IC
ELSE
IF(ITMP(IC).GT.INPUT(I))THEN
IR=IC-1
ELSE
IL=IC+1
END IF
GO TO 30
END IF
20 CONTINUE
C
RETURN
END
C
IMPLICIT NONE
INTEGER IDATA,IDX,INPUT,IOUT1,IOUT2,I,J,NN,N
INTEGER ISTART,IEND,IRATE,IMAX,NDIFF
REAL*8 TIME1,TIME2
PARAMETER(NN=24,N=2**NN)
DIMENSION IDATA(N),IDX(N),INPUT(N),IOUT1(N),IOUT2(N)
C
DO 10 I=1,N
IDATA(I)=1
DO 20 J=1,NN
IF(MOD((I-1)/2**(J-1),2).EQ.1)THEN
IDATA(I)=IDATA(I)+2**(NN-J)
END IF
20 CONTINUE
IDX(I)=IDATA(I)
INPUT(I)=IDATA(I)
10 CONTINUE
CALL SEARCH1(IDATA,IDX,INPUT,IOUT1,N)
CALL SYSTEM_CLOCK(ISTART,IRATE,IMAX)
CALL SEARCH1(IDATA,IDX,INPUT,IOUT1,N)
CALL SYSTEM_CLOCK(IEND,IRATE,IMAX)
TIME1=DBLE(IEND-ISTART)/DBLE(IRATE)
CALL SEARCH2(IDATA,IDX,INPUT,IOUT2,N)
CALL SYSTEM_CLOCK(ISTART,IRATE,IMAX)
CALL SEARCH2(IDATA,IDX,INPUT,IOUT2,N)
CALL SYSTEM_CLOCK(IEND,IRATE,IMAX)
TIME2=DBLE(IEND-ISTART)/DBLE(IRATE)
NDIFF=0
DO 30 I=1,N
IF(IOUT1(I).NE.IOUT2(I))THEN
NDIFF=NDIFF+1
END IF
30 CONTINUE
WRITE(*,*)TIME1,TIME2,NDIFF
END
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment