 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Grand's Guest
|
Posted: Mon Nov 15, 2004 9:24 am Post subject: tri par tas - HELP |
|
|
voila j'ai le code ci-dessous qui provient d'un bouquin et qui realise
le tri par tas
Code:
/*Fonction de selection de l'indice le plus grand d'un tableau.
Arguments:
- le tableau a trier
- la valeur a inserer
- les limites du tableau
*/
template <typename Type>
void insere_dans_tas(Type* t, Type x, int a, int b)
{
for(int m = 2*a; m <= b; m = 2*a) //boucle examinant le sous-arbre
de t[a]
{
if (m < b) // a a deux fils
if (t[m] < t[m+1]) m++; // on prend le fils le + grand
if (x >= t[m]) //si la valeur a inserer est +
grande
break; //on quitte la boucle
else
{
t[a] = t[m]; //sinon la racine devient t[m]
a = m;
}
}
t[a] = x; //on insere x
}
/*Fonction de creation du tas.
Arguments:
- le tableau a trier
- indice du dernier element du tableau
*/
template <typename Type>
void construis_tas(Type* t, int dernier)
{
for (int i = dernier/2; i >= 1; i--) //boucle de parcours du
tableau a partir du premier
//noeud a considerer
insere_dans_tas(t,t[i],i,dernier); //on insere le noeud dans le
tas
}
/*Fonction de tri par tas.
Arguments:
- le tableau a trier
- indice du dernier element du tableau
*/
template <typename Type>
void tri_par_tas(Type* t, int dernier)
{
construis_tas(t,dernier); //on construis le tas
for (int i = dernier; i >= 1; i--) //boucle de parcours du tableau
{
Type x = t[i]; //on sauve la derniere valeur du
tableau
t[i] = t[1]; //l'element est trie
insere_dans_tas(t,x,1,i-1); //on insere x dans le tas
}
}
il y avait un bel algo fourni avec et jusque la pas de probleme
Sauf qu'un tableau demarre a l'indice 0, et que cette indice n'est pas
pris en compte par cette fonction
Est-ce que jusque la j'ai raison ???
ne dois-je pas lire une premiere fois le tableau avant le tri pour
remonter la valeur la + grande sur la racine de l'arbre ???
merci de votre aide
--
Ceci est une signature automatique de MesNews.
Site : http://arnaud.mesnews.free.fr/
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Mon Nov 15, 2004 9:28 am Post subject: Re: tri par tas - HELP |
|
|
On Mon, 15 Nov 2004 10:24:09 +0100, Grand's <ici (AT) oula (DOT) bas>:
| Quote: | Est-ce que jusque la j'ai raison
???
|
C'est quoi comme trigraphe, ça ?
--
;-)
|
|
| Back to top |
|
 |
Jean-Marc Bourguet Guest
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Mon Nov 15, 2004 10:30 am Post subject: Re: tri par tas - HELP |
|
|
On 15 Nov 2004 10:37:32 +0100, Jean-Marc Bourguet <jm (AT) bourguet (DOT) org>:
| Quote: | C'est quoi comme trigraphe, ça ?
Un point d'interrogation.
|
Au fait, quelle est l'utilité d'avoir un trigraphe pour un caractère
accessible sur n'importe quel clavier ?
--
;-)
|
|
| Back to top |
|
 |
Jean-Marc Bourguet Guest
|
Posted: Mon Nov 15, 2004 10:38 am Post subject: Re: tri par tas - HELP |
|
|
Fabien LE LEZ <gramster (AT) gramster (DOT) com> writes:
| Quote: | On 15 Nov 2004 10:37:32 +0100, Jean-Marc Bourguet <jm (AT) bourguet (DOT) org>:
C'est quoi comme trigraphe, ça ?
Un point d'interrogation.
Au fait, quelle est l'utilité d'avoir un trigraphe pour un caractère
accessible sur n'importe quel clavier ?
|
Pris d'un doute, je verifie et ce n'est pas un trigraphe.
L'utilite aurait ete de pouvoir ecrire des points d'interrogations
sans devoir se demander s'ils etaient dans un trigraphe ou non. Mais
le seul contexte ou ca pose un probleme (a part le ?? a la fin d'un
commentaire cher a Sutter) c'est dans des chaines et la il y a
d'autres moyens (la concatenation etant vraissemblablement le prefere)
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
|
|
| Back to top |
|
 |
Jean-Marc Bourguet Guest
|
Posted: Mon Nov 15, 2004 1:12 pm Post subject: Re: tri par tas - HELP |
|
|
Grand's <ici (AT) oula (DOT) bas> writes:
| Quote: | il y avait un bel algo fourni avec et jusque la pas de probleme
Sauf qu'un tableau demarre a l'indice 0, et que cette indice n'est pas pris
en compte par cette fonction
Est-ce que jusque la j'ai raison ???
ne dois-je pas lire une premiere fois le tableau avant le tri pour remonter
la valeur la + grande sur la racine de l'arbre ???
|
J'ai pas envie de donner la solution, ca sent trop fort l'exercice (la
solution normale est d'utiliser std::sort). Je ne vais traiter que du
probleme d'algorithmique (il y a des choses a dire sur le C++ mais
j'ai pas le temps).
L'algorithme est base sur un arbre binaire balance dont on peut
retrouver les fils en faisant un calcul. Si les indices commencent a
1, les fils (fg, fd) du pere (p) sont
fg = 2*p
fd = 2*p + 1
(ce que tu utilises ci-dessus). Si on a des indices qui commencent a
zero, les indices sont
p' = p-1
fg' = fg - 1
fd' = fd - 1
Avec ca tu devrais etre capable de te debrouiller si tu as compris
l'algorithme.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
|
|
| Back to top |
|
 |
Grand's Guest
|
Posted: Mon Nov 15, 2004 2:18 pm Post subject: Re: tri par tas - HELP |
|
|
merci
effectivement c'est bien un exercice demandé par mon prof
tout en sachant que le sujet, tiré d'un bouquin, est fourni avec la
solution
En plus j'ai oublié de lire une phrase ou l'auteur disait que ce tri ne
prenait pas en compte l'indice 0 du tableau.
ce qui explique ma question...desolé
Je voulais juste etre sur de ne pas avoir raté quelque chose
merci
Jean-Marc Bourguet a écrit :
| Quote: | Grand's <ici (AT) oula (DOT) bas> writes:
il y avait un bel algo fourni avec et jusque la pas de probleme
Sauf qu'un tableau demarre a l'indice 0, et que cette indice n'est pas pris
en compte par cette fonction
Est-ce que jusque la j'ai raison ???
ne dois-je pas lire une premiere fois le tableau avant le tri pour remonter
la valeur la + grande sur la racine de l'arbre ???
J'ai pas envie de donner la solution, ca sent trop fort l'exercice (la
solution normale est d'utiliser std::sort). Je ne vais traiter que du
probleme d'algorithmique (il y a des choses a dire sur le C++ mais
j'ai pas le temps).
L'algorithme est base sur un arbre binaire balance dont on peut
retrouver les fils en faisant un calcul. Si les indices commencent a
1, les fils (fg, fd) du pere (p) sont
fg = 2*p
fd = 2*p + 1
(ce que tu utilises ci-dessus). Si on a des indices qui commencent a
zero, les indices sont
p' = p-1
fg' = fg - 1
fd' = fd - 1
Avec ca tu devrais etre capable de te debrouiller si tu as compris
l'algorithme.
A+
|
--
Ceci est une signature automatique de MesNews.
Site : http://arnaud.mesnews.free.fr/
|
|
| Back to top |
|
 |
drkm Guest
|
Posted: Tue Nov 16, 2004 12:11 am Post subject: Re: tri par tas - HELP |
|
|
Jean-Marc Bourguet <jm (AT) bourguet (DOT) org> writes:
| Quote: | (a part le ?? a la fin d'un
commentaire cher a Sutter)
|
Cher à Sutter ? Pour quelles raisons ce machin peut-il être cher à
quelqu'un ?
--drkm
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Tue Nov 16, 2004 6:25 am Post subject: Re: tri par tas - HELP |
|
|
On Tue, 16 Nov 2004 01:11:02 +0100, drkm <usenet.fclcxx (AT) fgeorges (DOT) org>:
| Quote: | Pour quelles raisons ce machin peut-il être cher à
quelqu'un ?
|
En tant qu'exemple de "trigraphe malgré lui".
Cf GoTW.
--
;-)
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Tue Nov 16, 2004 7:43 am Post subject: Re: tri par tas - HELP |
|
|
Jean-Marc Bourguet <jm (AT) bourguet (DOT) org> wrote
| Quote: | Grand's <ici (AT) oula (DOT) bas> writes:
il y avait un bel algo fourni avec et jusque la pas de probleme Sauf
qu'un tableau demarre a l'indice 0, et que cette indice n'est pas
pris en compte par cette fonction
Est-ce que jusque la j'ai raison ???
ne dois-je pas lire une premiere fois le tableau avant le tri pour
remonter la valeur la + grande sur la racine de l'arbre ???
J'ai pas envie de donner la solution, ca sent trop fort l'exercice (la
solution normale est d'utiliser std::sort). Je ne vais traiter que du
probleme d'algorithmique (il y a des choses a dire sur le C++ mais
j'ai pas le temps).
|
Et cependant...
| Quote: | L'algorithme est base sur un arbre binaire balance dont on peut
retrouver les fils en faisant un calcul. Si les indices commencent a
1, les fils (fg, fd) du pere (p) sont
fg = 2*p
fd = 2*p + 1
(ce que tu utilises ci-dessus). Si on a des indices qui commencent a
zero, les indices sont
p' = p-1
fg' = fg - 1
fd' = fd - 1
|
C'est que justement, en C++, les indices commence par 0, non 1. Aussi,
il y avait un <=b, à la place d'un
supérieur était inclusive, et non exclusive, comme c'est la règle
habituelle et idiomatique.
--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
|
|
| Back to top |
|
 |
Grand's Guest
|
Posted: Tue Nov 16, 2004 8:01 am Post subject: Re: tri par tas - HELP |
|
|
merci beaucoup
[email]kanze (AT) gabi-soft (DOT) fr[/email] a formulé la demande :
| Quote: | Jean-Marc Bourguet <jm (AT) bourguet (DOT) org> wrote in message
news:<pxblld3uug5.fsf (AT) news (DOT) bourguet.org>...
Grand's <ici (AT) oula (DOT) bas> writes:
il y avait un bel algo fourni avec et jusque la pas de probleme Sauf
qu'un tableau demarre a l'indice 0, et que cette indice n'est pas
pris en compte par cette fonction
Est-ce que jusque la j'ai raison ???
ne dois-je pas lire une premiere fois le tableau avant le tri pour
remonter la valeur la + grande sur la racine de l'arbre ???
J'ai pas envie de donner la solution, ca sent trop fort l'exercice (la
solution normale est d'utiliser std::sort). Je ne vais traiter que du
probleme d'algorithmique (il y a des choses a dire sur le C++ mais
j'ai pas le temps).
Et cependant...
L'algorithme est base sur un arbre binaire balance dont on peut
retrouver les fils en faisant un calcul. Si les indices commencent a
1, les fils (fg, fd) du pere (p) sont
fg = 2*p
fd = 2*p + 1
(ce que tu utilises ci-dessus). Si on a des indices qui commencent a
zero, les indices sont
p' = p-1
fg' = fg - 1
fd' = fd - 1
C'est que justement, en C++, les indices commence par 0, non 1. Aussi,
il y avait un <=b, à la place d'un
supérieur était inclusive, et non exclusive, comme c'est la règle
habituelle et idiomatique.
|
--
Ceci est une signature automatique de MesNews.
Site : http://arnaud.mesnews.free.fr/
|
|
| Back to top |
|
 |
drkm Guest
|
Posted: Tue Nov 16, 2004 9:49 pm Post subject: Re: tri par tas - HELP |
|
|
Fabien LE LEZ <gramster (AT) gramster (DOT) com> writes:
| Quote: | On Tue, 16 Nov 2004 01:11:02 +0100, drkm <usenet.fclcxx (AT) fgeorges (DOT) org>:
Pour quelles raisons ce machin peut-il être cher à
quelqu'un ?
En tant qu'exemple de "trigraphe malgré lui".
Cf GoTW.
|
Ok. Par « cher à », j'avais compris qu'il l'avait défendu, qu'il y
trouvait un intérêt.
--drkm
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Wed Nov 17, 2004 2:30 pm Post subject: Re: tri par tas - HELP |
|
|
drkm <usenet.fclcxx (AT) fgeorges (DOT) org> wrote
| Quote: | Fabien LE LEZ <gramster (AT) gramster (DOT) com> writes:
On Tue, 16 Nov 2004 01:11:02 +0100, drkm <usenet.fclcxx (AT) fgeorges (DOT) org>:
Pour quelles raisons ce machin peut-il être cher à quelqu'un ?
En tant qu'exemple de "trigraphe malgré lui".
Cf GoTW.
Ok. Par « cher à », j'avais compris qu'il l'avait défendu, qu'il y
trouvait un intérêt.
|
Ça dépend du sens que tu donnes à « intérêt ». Il l'a trouvé
intéressant, en tout cas, ce qui montre un certain intérêt. Un intérêt
qui s'apparente à la curiosité morbide.
--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|