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



Copyright © Jean-François Colonna, 2019-2021.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2019-2021.