/*************************************************************************************************************************************/ /* */ /* O P E R A T I O N S D E T R I S U R D E S F I C H I E R S : */ /* */ /* */ /* Author of '$xrv/variation.11$I' : */ /* */ /* Jean-Francois Colonna (LACTAMME, 20000217100842). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P R O C E D U R E D E T R I E N " N A U C A R R E " : */ /* */ /*************************************************************************************************************************************/ #define GENERATION_D_UNE_LISTE_TRIEE_VERSION_N_AU_CARRE(liste_triee,liste_a_trier,premier_element,dernier_element) \ Bblock \ DEFV(Int,INIT(index,UNDEF)); \ DEFV(Int,INIT(index_de_debut_de_permutation,UNDEF)); \ DEFV(Int,INIT(index_de_fin_de_permutation,UNDEF)); \ /* Index de permutation destines a trier la liste tel que le plus petit element se retrouve */ \ /* en tete de la liste triee... */ \ \ DoIn(index,premier_element,dernier_element,I) \ Bblock \ EGAL(gELEMENT_DU_FICHIER(liste_triee,index),gELEMENT_DU_FICHIER(liste_a_trier,index)); \ /* Initialisation du processus... */ \ Eblock \ EDoI \ \ DoDe(index_de_fin_de_permutation,premier_element,PRED(dernier_element),I) \ Bblock \ DoIn(index_de_debut_de_permutation,premier_element,index_de_fin_de_permutation,I) \ Bblock \ DEFV(Int,INIT(index_1_de_permutation,NEUT(index_de_debut_de_permutation))); \ DEFV(Int,INIT(index_2_de_permutation,SUCC(index_de_debut_de_permutation))); \ /* Index de permutation destines a permuter les deux elements courants de la liste. */ \ \ Test(IFGT(gELEMENT_DU_FICHIER(liste_triee,index_1_de_permutation) \ ,gELEMENT_DU_FICHIER(liste_triee,index_2_de_permutation) \ ) \ ) \ Bblock \ fSWAP(gELEMENT_DU_FICHIER(liste_triee,index_1_de_permutation) \ ,gELEMENT_DU_FICHIER(liste_triee,index_2_de_permutation) \ ); \ /* Lorsqu'un element est plus grand que son successeur, on les permute, ainsi, */ \ /* progressivement le plus petit element se retrouvera en tete, et le plus grand en queue... */ \ /* Enfin, cette facon de proceder conserve l'ordre des elements possedant la meme clef de */ \ /* tri. */ \ Eblock \ ATes \ Bblock \ Eblock \ ETes \ Eblock \ EDoI \ Eblock \ EDoD \ Eblock \ /* Tri d'une liste quelconque avec une methode en 'N' au carre... */