Algorithme tri croissant

julie -  
 badi -
bonjour
j ai un petit pb avec un algorithme de tri que je n arrive pas a faire fonctionner cela fait assez longtemps que je n ai pas eu faire ce gnere de fonction et j en ai enormement besoin pour mon patron
aidez moi svp
je souhaite effectuer le tri croissant de ces 5 nb 45/50/2/-45/46 en sachant que le nb de saisi est saisi par l utilisateur merci bocoup
ps ecrivez le moi en algorithme merci

14 réponses

  1. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    Il existe plusieurs algo (tri à bulle, quicksort, etc.)

    Tu n'as pas une idée sur la façon de faire ?
    Essai d'imaginer comment tu ferais.

    Et même sans ça, tu ne crois pas que tu pourrais chercher un peu sur Google ?
    5
  2. kayzer75
     
    pour ton patron lol
    mais comment il ta embauché si sais pas faire ça
    haha
    3
  3. kamgamartins
     
    Bonjour,
    essaie ceci

    #include <stdio.h>
    #include <conio.h>
    #define LG 128
    main()
    {
    int x[100]; /* tableau d'entiers */
    int i = 0; /* variable de controle */
    int last; /* Index de la derniere valeur saisie */
    int d; /* nombre de passages de tri */
    int k,j,z,ok; /*k,z et ok sont des variables de controles,et j un cpteur*/
    int temp; /* variable auxiliaire pour permutation */
    char reply; /* variable de contr0le */
    char ligne[LG+1]; /*tabeau recevant la saisie de l'utilisateur au clavier*/
    printf("Le programme saisit jusqu'à 100 entiers positifs compris entre \n"
    "0 et 30000 et les trie en ordre croissant ou décroissant (au choix).\n"
    "Fin par -1.\n\n");
    printf("Entrez les nombres positifs :\n\n");
    do
    {
    /*ici on controle si la valeur saisie est entiere et appatient à l'inteval
    voulu,sinon on genère un message d'erreur*/ do{ ok=0;
    gets(ligne);
    for(j=0;j<strlen(ligne);j++)
    /*ceci protège contre la saisie des valeurs réelles*/
    if(ligne[j]=='.'){ok=1;printf("Saisie incorrecte!Recommencer SVP:\n");}
    k=sscanf(ligne,"%d", &x[ i ]);
    /*ceci protège contre une touche inattendue ou une valeur
    non compris dans l'interval voulu*/ if(k!=1) {printf("Saisie incorrecte!Recommencer SVP:\n");ok=1;}
    else if(!(x[ i ]>=-1&&x[ i ]<=30000)){printf("Saisie incorrecte!Recommencer SVP:\n"); ok=1;}
    /*c'est le dernier test contre les données superflues du genre 25ff ou 2f*/
    if(ok==0)for (j=0;j<strlen(ligne);j++){z=ligne[j]-'1';
    if(!(z>=0&&z<10)&&x[i]!=-1&&ligne[j]!=32&&ligne[j]!='0')
    {ok=1;
    /*on vide*/
    for (j=0;j<strlen(ligne);j++)ligne[j]=' ';
    printf("Des données superflues saisies!\n");
    printf("Recommencer la précédente saisie\n");}
    }
    }while(ok);
    i++;
    } while (x[i-1] != -1 && i < 100);
    /*Rien n'est changé à ce niveau sauf le message sur le nombre des valeurs saisies*/
    if(i==100) printf("\nvous avez saisie %d valeurs",i);
    else printf("\nvous avez saisie %d valeurs",i-1);
    if (i == 100)
    last = i-1;
    else
    last = i-2;
    if (i == 2)
    printf("\n\nLe tableau ne contient que la valeur : %d\n\n", x[i-2]);
    else if (i > 2)
    {
    printf("\n\nLe tableau contient les valeurs :\n\n");
    for (i = 0; i <= last; i++)
    {
    printf("%d\t", x[ i ]);
    if (i && (!(i % 8)))
    printf("\n");
    }
    /*test de selection de choix*/
    do{ ok=0;
    printf("\n\nTri du tableau ?\n"
    "Ascendant = a Descendant = d Non = n : ");
    reply = getche();
    k=reply;
    if(k!='a'&&k!='d'&&k!='n'){ok=1;printf("\n\nchoix incorrect\n");}
    if(k=='n')printf("\n\nFIN DU PROGRAMME,Merçi :p).");
    }while(ok);
    switch (reply)
    {
    case 'a': for (d = last; d != 0; d--)
    for (i = 0; i < d; i++)
    if (x[ i ] > x[i+1])
    { /* on permute */
    temp = x[ i ];
    x[ i ] = x[i+1];
    x[i+1] = temp;
    }
    printf("\n\nLe tableau a été trié en ordre ascendant :\n\n");
    for (i = 0; i <= last; i++)
    {
    printf("%d\t", x[ i ]);
    if (i && (!(i % 8)))
    printf("\n");
    }
    break;
    case 'd': for (d = last; d != 0; d--)
    for (i = 0; i < d; i++)
    if (x[ i ] < x[i+1])
    {
    temp = x[ i ];
    x[ i ] = x[i+1];
    x[i+1] = temp;
    }
    printf("\n\nLe tableau a été trié en ordre descendant :\n\n");
    for (i = 0; i <= last; i++)
    {
    printf("%d\t", x[ i ]);
    if (i && (!(i % 8)))
    printf("\n");
    }
    }
    }
    }
    2
  4. Polux31 Messages postés 7219 Statut Membre 1 204
     
    bonjour ... mdrrr x 10 ... vous avez vu la date du 1er post ..

    tahtouha, un conseil ouvre un autre post

    ;o)

    Polux
    1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Floran
     
    Salut Julie,
    Je ne suis pas expert en informatique mais je pense que tu peut t'inspirer des algo de tri du site suivant.
    www.greyc.ensicaen.fr/ensicaen/CoursEnLigne/AlgoTri.pdf
    Si vraiment tu n'y arrives pas recontact moi en me donnant ton language de programmation.
    0
  7. tahtouha
     
    slt tt le monde chui tahtouha etudiante (bac informatique )
    j'ai un prb avec l'algorithme offf é surtout tri shell j'ai rien comprie :'(
    0
    1. coucou_hb21 Messages postés 33 Statut Membre
       
      moi aussi je suis en bac info :
      pour le tri shell cé facile mais il faut juste la concentration :
      tous d'abord on dois chercher le "pas" et d'aprés le pas on peut trier le tableau et a un certain moment le tri shell va étre eliminer et on va terminer avec le tri par insertion
      (je sais que tu n'a pas compris mais essaye)

      conclusion: le tri shell est un moyen de tri mais ce n'est pas un tri total, il permet juste d'avoir un demi tri c'est à dire un tri qui permet de mettre les entiers les plus petites ensembles (si on a le pas=4 alors les quatres premiers nombres sont les plus petits et les quatres suivants sont les plus grands ......................)

      il ya une formule que tu dois l'apprendre et c'est la plus courament utilisée pour calculer la valeur des pas succesives :
      Un+1 = 3* Un +1
      avec U1= 0
      la version qui est proposé dans ce cours prefert calcluer, à l'aide de la formule donnée si dessus, la plus grande pas p ( tels que p< n) .
      pour trouver les autres valeurs succesives de p, il suffit à chaque étape de diviser p par 3 ( division entiére)
      RP: le p c'est le pas.
      exemple: chercher les grandes successives de p pour n=100.
      * calcul du plus grande valeur de P tels que (P<100)
      U1 =0
      U2= 3*U1 +1 = 1
      U3= 3* U2 +1 = 4
      U4= 3*U +1 = 13
      U5 = 3*U4 +1 = 40
      U6 = 3* U5 +1 =121 ( elliminer car on on p<100)
      donc notre p est le 40.
      maintenant on va chercher le nombre de p :
      p1= 40
      p2 = 40 div 3 =13
      p3 = 13 div3 =4
      p4= 4 div 3 =1
      p5 il n'ya pas .
      (compris ou non ?)
      maintenant on va trier un tableau à l'aide de tri schell:
      prenons un tableau de10 cases portant des différents valeurs ( tableau non trié)
      d'abord on va comparer t[1] avec t[5] car on a le pas = 4 et notre tableau de 10 élements
      ok
      si on trouve que t[5] est plus petit que t[1] on permute
      sinon on passe dans la deuxiéme case : la méme chose
      jusqu'à arriver à la derniere case c'est à dire t[10]
      enfin si on a arrivé à la case 10, on aura pas besoin de tri shell mais le tri par insertion pour pouvoir terminer le tri.

      espérant que tu a compris : cé facil concentre toi
      prenez un tableau est essayé tu va le comprendre.
      ok
      si tu as besoin d'autre choise demande la.
      coucou_hb20@hotmail.com
      a++++++++++
      0
  8. Polux31 Messages postés 7219 Statut Membre 1 204
     
    pour rien :os
    0
  9. Qwerti Messages postés 166 Statut Membre 85
     
    vous avez vu la date du 1er post ..

    Indiana Jones is back.

    :-D
    0
  10. asma
     
    salut c'est asma
    0
    1. badi
       
      c'est quoi ton probleme asma
      0
  11. Polux31 Messages postés 7219 Statut Membre 1 204
     
    enchanté ... moi polux ... toi asma ?

    :o)
    0
  12. info_dridi Messages postés 4 Date d'inscription   Statut Membre
     
    ce programme permet de trié un tableau croissonte avec le tri insertion version récursif
    PROGRAM TRI;
    USES WINCRT ;
    TYPE
    TAB=array[1..100]of integer;
    var
    n,i:integer;
    t:tab;
    procedure insert( a:integer;var t:tab; m:integer);
    begin
    while((a< t[m] )and (m >= 1) )do
    begin
    t[m+1]:= t[m];
    m:=m-1;
    end;
    t[m+1]:=a;
    end;
    procedure trinsert( var t:tab;n:integer);
    begin
    if n>1 then
    begin
    trinsert( t,n-1);
    insert(t[n],t,n-1);
    end;
    end;

    begin
    writeln(' donner le nbr delement du tableau ');
    read(n);
    for i:=1 to n do
    begin
    writeln(' dooner le vleur de ',i,':');
    read(t[i]);

    end;
    trinsert(t,n);

    for i:=1 to n do
    writeln( t[i]);

    end.
    -1