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

sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   15 662
 
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
kayzer75
 
pour ton patron lol
mais comment il ta embauché si sais pas faire ça
haha
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
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   1 204
 
bonjour ... mdrrr x 10 ... vous avez vu la date du 1er post ..

tahtouha, un conseil ouvre un autre post

;o)

Polux
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
w1sm3rhi11 Messages postés 372 Date d'inscription   Statut Membre Dernière intervention   53
 
Salut,

Je te mets ici le lien vers une de mes sources si jamais ca peut te servir : https://codes-sources.commentcamarche.net/
0
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
coucou_hb21 Messages postés 33 Date d'inscription   Statut Membre Dernière intervention  
 
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
tahtouha
 
pk
0
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   1 204
 
pour rien :os
0
Qwerti Messages postés 166 Date d'inscription   Statut Membre Dernière intervention   85
 
vous avez vu la date du 1er post ..

Indiana Jones is back.

:-D
0
tahtouha
 
ö,ö
\_/
0
asma
 
salut c'est asma
0
badi
 
c'est quoi ton probleme asma
0
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   1 204
 
enchanté ... moi polux ... toi asma ?

:o)
0
info_dridi Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
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