1 : C TRIDEP SOURCE CHAT 05/01/13 03:46:49 5004 2 : SUBROUTINE TRIDEP(KA,KB,N) 3 : IMPLICIT INTEGER(I-N) 4 : CHARACTER*(*) KA(N),KB(N) 5 : CHARACTER*8 IAX 6 : C 7 : C EN ENTREE : KA TABLEAU A TRIER 8 : C N SA DIMENSION 9 : C KB TABLEAU DE TRAVAIL 10 : C 11 : C EN SORTIE :KA TABLEAU TRIE EN ORDRE CROISSANT 12 : C 13 : IF(N.EQ.1) RETURN 14 : C 15 : C ON FAIT UNE PREMIERE BOUCLE POUR LES ORDONNES 2 A 2 .CECI PERMET 16 : C DESAUVER 3*N/2 TESTS. 17 : C 18 : NC=N/2 19 : DO 4 I=1,NC 20 : J=2*I-1 21 : J1=J+1 22 : IF(KA(J).LT.KA(J1)) GO TO 4 23 : IAX=KA(J1) 24 : KA(J1)=KA(J) 25 : KA(J)=IAX 26 : 4 CONTINUE 27 : IF(N.EQ.2) RETURN 28 : C 29 : C ON CONTINUE A LES ORDONNNES NI PAR NI 30 : C 31 : NI=2 32 : 1 ND=NI 33 : NI=NI*2 34 : NC=N/NI 35 : NE=MOD(N,NI) 36 : IF(NE.GT.ND) NC=NC+1 37 : NF2=0 38 : INC=0 39 : DO 2 I=1,N 40 : 2 KB(I)=KA(I) 41 : C 42 : C BOUCLE SUR LES NC COUPLES DE ND VALEURS 43 : C 44 : DO 30 JJ=1,NC 45 : N1=NF2+1 46 : N2=N1+ND 47 : NF1=NF2+ND 48 : NF2=NF1+ND 49 : NF2=MIN(NF2,N) 50 : 13 INC=INC+1 51 : IF(KB(N1).GT.KB(N2)) GO TO 14 52 : KA(INC)=KB(N1) 53 : IF(N1.GE.NF1) GO TO 17 54 : N1=N1+1 55 : GO TO 13 56 : 14 KA(INC)=KB(N2) 57 : IF(N2.GE.NF2) GO TO 18 58 : N2=N2+1 59 : GO TO 13 60 : 17 DO 20 I=N2,NF2 61 : 20 KA(I)=KB(I) 62 : INC=NF2 63 : GO TO 30 64 : 18 DO 21 I=N1,NF1 65 : INC=INC+1 66 : 21 KA(INC)=KB(I) 67 : 30 CONTINUE 68 : IF(NI.GE.N) RETURN 69 : GO TO 1 70 : END 71 :
© Cast3M 2003 - All rights reserved.
Disclaimer