C++ > Tri par Tas

TitreTri par Tas
Postée le01-11-2009
Affichée1360
Mini-lien
Description

comme le dis le titre.

EtatNe contient pas d'erreurs. Ne contient pas d'erreurs.
Code d'insertion
Options
Afficher les numéros de lignes  Mettre la source en plein ecran  Selectionner la source  Partager sur Facebook 
Téléchargement Telecharger en format txt  Telecharger en format pdf  Telecharger en format cpp
Plein ecran
#include <stdio.h>

#define T_Elt long

void affiche(T_Elt T[], const int n)
{
        int i;
        printf("|");
        for(i=0;i<n;++i)
        {
                printf("%ld|",T[i]);
        }
        printf("\n");
}

void echanger (T_Elt T[], int i, int j)
{
        int echange;
        echange=T[i];
        T[i]=T[j];
        T[j]=echange;
}
void remonter (T_Elt T[], int n, int i)
{
        if (i==0) return;
        if (T[i]>T[i/2])
        {
                echanger (T, i, i/2);  
                remonter (T, n, i/2);
        }
}
void redescendre ( T_Elt T[], const int n, int i)
{
        int imax;
        if (2*i+1>=n) return;
        if (T[2*i+1]>T[2*i])
        imax=2*i+1;
        else
        imax=2*i;
        if (T[imax]>T[i])
        {
                echanger (T, imax, i);
                redescendre (T, n, imax);
        }
}
void organiser( T_Elt T[], int n )
{
        int i;
        for(i = 1 ; i < n ; i++)
        remonter(T, n, i);
}

void Tri_Arbre( T_Elt T[], const int n )
{
        int i;
        organiser(T, n);
        for(i=n-1 ; i>0 ; i-- )
        {
                echanger(T, 0, i);
                redescendre(T, i, 0);
        }
}

int main(int argc, char ** argv)
{
        const int n=6;
        T_Elt T[n] = {16,70,8,11,23,45};
        affiche(T, n);
        Tri_Arbre( T, n );
        affiche(T, n);
        return 0;
}