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