trifus
C TRIFUS SOURCE GOUNAND 25/04/30 21:15:39 12258 C**************************************************************************** C**************************************************************************** C*************TRIFUS....TRI par FUSion************************************** C**************************************************************************** C**************************************************************************** SUBROUTINE TRIFUS(NODES,IKA,JNT,IKB,KNT) IMPLICIT INTEGER(I-N) INTEGER IKA(NODES) INTEGER IKB(NODES) INTEGER JNT(NODES) INTEGER KNT(NODES) INTEGER IAX,IBX C EN ENTREE : IKA TABLEAU A TRIER C EN SORTIE : IKA TABLEAU TRIE EN ORDRE CROISSANT N=NODES IF(N.EQ.1) GOTO 999 C C ON FAIT UNE PREMIERE BOUCLE POUR LES ORDONNES 2 A 2 .CECI PERMET C DE SAUVER 3*N/2 TESTS. C NC=N/2 DO 4 I=1,NC J=2*I-1 J1=J+1 IF (IKA(J).LE.IKA(J1)) GO TO 4 IAX=IKA(J1) IKA(J1)=IKA(J) IKA(J)=IAX IBX=JNT(J1) JNT(J1)=JNT(J) JNT(J)=IBX 4 CONTINUE IF(N.EQ.2) GOTO 999 C C ON CONTINUE A LES ORDONNNES NI PAR NI C 1 CONTINUE ND=NI IF(NE.GT.ND) NC=NC+1 NF2=0 INC=0 DO 2 I=1,N IKB(I)=IKA(I) KNT(I)=JNT(I) 2 CONTINUE C C BOUCLE SUR LES NC COUPLES DE ND VALEURS C DO 30 JJ=1,NC N1=NF2+1 N2=N1+ND NF1=NF2+ND NF2=NF1+ND NF2=MIN(NF2,N) 13 CONTINUE INC=INC+1 IF (IKB(N1).GE.IKB(N2)) GO TO 14 IKA(INC)=IKB(N1) JNT(INC)=KNT(N1) IF(N1.GE.NF1) GO TO 17 N1=N1+1 GO TO 13 14 CONTINUE IKA(INC)=IKB(N2) JNT(INC)=KNT(N2) IF(N2.GE.NF2) GO TO 18 N2=N2+1 GO TO 13 17 CONTINUE DO 20 I=N2,NF2 IKA(I)=IKB(I) JNT(I)=KNT(I) 20 CONTINUE INC=NF2 GO TO 30 18 CONTINUE DO 21 I=N1,NF1 INC=INC+1 IKA(INC)=IKB(I) JNT(INC)=KNT(I) 21 CONTINUE 30 CONTINUE GO TO 1 999 CONTINUE RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales