1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
   | #include <iostream>
#define FOR(j) for(int i=0; i<j; i++)
 
using namespace std;
 
void copie(long *tableauOriginal, long *tableauCopie, long tailleTableau);
void ordonne(long *tableau, long tailleTableau);
long minimumTableau(long *tableau, long tailleTableau );
long valeurMaxTableau(long *tableau, long tailleTableau );
void afficheTableau( long *tableau, long tailleTableau);
 
 
int main()
{
    long tableau[10]={5,8,6,7,5,3,4,8,1,5};
    long tableau2[10]={5,8,6,7,5,3,4,8,1,5};
    ordonne(tableau2,10);
    afficheTableau(tableau,10);
    afficheTableau(tableau2,10);
    system("PAUSE");
	return 0;
}
 
 
void copie(long *tableauOriginal, long *tableauCopie, long tailleTableau)
{
    FOR(tailleTableau)
        {tableauCopie[i]=tableauOriginal[i];}
}
 
long minimumTableau(long *tableau, long tailleTableau )
{
    long i,minimum,ouEstMinimum;
 
    // on initialise les valeurs de minimu et ouEstMinimum
    minimum=tableau[0];
    ouEstMinimum=0;
 
    //Ensuite on conpare cette valeur a celle du tableau
    FOR(tailleTableau)
    {
        // si on en recontre une plus petite on la stock dans minimum et on retient son emplacement
        if (tableau[i]<minimum)
        { minimum=tableau[i];
          ouEstMinimum=i;
        }
    }
    //ayant trouvé le minimumn on met un zero a la place et on renvoi le minimum
    tableau[ouEstMinimum]=0;
    return minimum;
}
 
void ordonne(long *tableau, long tailleTableau)
{
    // On cherche la valeur max du tableau a ordonner
    long valeurMax;
    valeurMax=valeurMaxTableau(tableau, tailleTableau);
 
    // On copie le tableau dans un deuxième tableau
    int *tableau2 = NULL;
    tableau2 = new int[tailleTableau];
    copie(tableau,tableau2,tailleTableau);
 
    // On créé un tableau pour stocker les positions des minimums successifs
    int *tableauDesMinimums = NULL;
    tableauDesMinimums = new int[tailleTableau];
 
 
    FOR(tailleTableau)
    {
        // on cherche le minimum du tableau et on stock sa position plutot que sa valeur
        tableauDesMinimums[i]=minimumTableau(tableau2, tailleTableau);
        // On met une valeur suffisament grande pour être sure de ne pas retomber dessus
        tableau2[tableauDesMinimums[i]]=(valeurMax+1);
    }
 
    FOR(tailleTableau)
    {
       // On ordonne ensuite le tout
       tableau2[i]=tableau[tableauDesMinimums[i]];
    }
 
 
    copie(tableau2,tableau,tailleTableau);
 
    delete tableauDesMinimums;
    delete tableau2;
}
 
long valeurMaxTableau(long *tableau, long tailleTableau )
{
 
    long valeurMaxTableau;
    valeurMaxTableau=tableau[0];
 
    FOR(tailleTableau)
    {
        if (tableau[i]>valeurMaxTableau)
        {
            valeurMaxTableau= tableau[i];
        }
    }
 
    return valeurMaxTableau ;
}
 
 
void afficheTableau(long *tableau, long tailleTableau)
{
    FOR(tailleTableau)
    {
        cout << i << "  "<< tableau[i]<<endl;
    }
} | 
Partager