/*************************************************************************************************************************************/
/* */
/* 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... */