Algorithme tri croissant

Fermé
julie - 27 déc. 2005 à 19:54
 badi - 13 janv. 2009 à 12:25
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 mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
9 août 2006 à 22:48
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
pour ton patron lol
mais comment il ta embauché si sais pas faire ça
haha
3
kamgamartins
2 oct. 2007 à 16:41
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 mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
15 déc. 2007 à 15:10
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
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 jeudi 20 septembre 2007 Statut Membre Dernière intervention 30 mars 2009 53
3 oct. 2007 à 16: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
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 lundi 8 octobre 2007 Statut Membre Dernière intervention 21 janvier 2008
15 déc. 2007 à 21:59
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
pk
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
15 déc. 2007 à 15:15
pour rien :os
0
Qwerti Messages postés 166 Date d'inscription dimanche 2 septembre 2007 Statut Membre Dernière intervention 28 octobre 2008 85
15 déc. 2007 à 15:15
vous avez vu la date du 1er post ..

Indiana Jones is back.

:-D
0
ö,ö
\_/
0
salut c'est asma
0
c'est quoi ton probleme asma
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
15 janv. 2008 à 00:27
enchanté ... moi polux ... toi asma ?

:o)
0
info_dridi Messages postés 4 Date d'inscription jeudi 14 février 2008 Statut Membre Dernière intervention 21 février 2008
21 févr. 2008 à 16:54
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