Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 20102 29 oct. 2004 à 23:33
HUM...!!
c'est gentil de mettre en ligne une source qui marche pas.
Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 20102 28 oct. 2004 à 11:57
ca marche quand meme pas, il refuse le ptr = sortarray+a;
Tu veux pas nous faire une jolie MAJ ac un exemple fonctionnel cette fois? la je commence a saturer :).
Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 20102 28 oct. 2004 à 11:08
OK c'est bien ce que je pensais (du moins pour les 4 passes et le tableau ) pour l'autre j'aurais pas trouvé :)
Thanks
zoom1984
Messages postés17Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention26 février 2005 28 oct. 2004 à 00:06
"Comment une classe + un entier == une adresse de classe????"
En fait un tableau c'est un pointeur qui pointe sur une plage mémoire.
donc : ptr+a est équivalent à &(ptr[a])
et : *(ptr+a) est équivalent à ptr[a]
zoom1984
Messages postés17Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention26 février 2005 27 oct. 2004 à 23:53
Ouais en fait gourance de ma part je crois ( j'ai pas compilé l'exemple que j'ai fourni ... honte sur moi )
Le template attend une référence .. donc faut faire plutot un truc du style :
Il y a quatre passes parce que le tri de chaque passe se fait sur chaque octet du poid le plus faible au poid le plus fort. On peut limiter à deux ou trois passes si on ne trie que des entiers définis sur 16 ou 24 bits.
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 27 oct. 2004 à 21:46
bon, j'ai d'autres projets ^ ^(je suis nul en anglais...)
en tt cas bravo pour la vitesse de tri...
Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 20102 27 oct. 2004 à 21:43
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 27 oct. 2004 à 21:40
Perso, je ne comprends pas grand chose au goufre du C++, en général, je reste dans les sentiers batus du C
Tu parlais d'une page qui expliquait cela, et ... j'aurais bien aimé l'obtennir...
J'en suis resté à Qsort... enfin a moins qu'il y ai quelques conneries de rédigés dans linux mag, Qsort est le plus rapide quand on ne recopies pas le tableau autre part...
Arapement, ta technique est bien meilleur que Qsort...
Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 20102 27 oct. 2004 à 21:16
C'est pas un bug mais bon...
j'ai un pb en voulant faire un classement de mes particules:
jai une classe Particules:
class Particules{
public:
...
float dist;// c'est la distance entre la particule et la caméra
}
Particules Particule[1000];// on crée 1000 particules (nan pas possible! :) )
Ca ne differe en (presque) rien a l'exemple que tu donnais, et pourtant le compilo me dit que le premier argument de AddElement n'est pas bon,que c'est un Particules* et qu'il lui faut un Particules &* (qqch comme ca, je cite de memoire).
Ou est l'erreur?
Par ailleurs, il y a 2 choses que je ne comprends pas:
- un tri Radix d'entiers se fait, si j'ai bien compris, en une seule passe; or la t'en fais 1+3*1=4. Pourquoi?
- dans la fonction AddElement, tu mets "allstructs+a" comme premier parametre.Or allstructs est un tableau de MaStruct et a un entier; et la fonction prend _T&_t comme premier parametre. Comment une classe + un entier == une adresse de classe????
voila, merci de tes réponses.
++
Ad
zoom1984
Messages postés17Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention26 février 2005 27 oct. 2004 à 01:19
eh ben non, j'ai pas rippé ....
Je connais cet algo depuis pas mal de temps en fait : il y a fort longtemps, genre aux temps préhistoriques, lorsque les cartes 3d n'existaient pas et qu'on voulait afficher du triangle à gogo, il fallait savoir trier rapidement.
En fait, encore aujourd'hui, on a toujours besoins d'algos de tris pour la 3d : exemple tes particules ou bien pour les faces en opacité ( blend alpha, 1-alpha ). C'est pour ça que ce template traine dans mon moteur.
Voila voila ...
Si tu trouves des bugs, n'hésite pas à me les signaler.
Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 20102 27 oct. 2004 à 00:37
effectivement c'est pas un milliard c'est 10 millions ;)
Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 20102 27 oct. 2004 à 00:33
un bon point pour toi: ya qu'un seul include (et pas 4 comme chez l'autre (grrr) )
par contre tu pourrais pas nous faire un exemple en peu plus "fleuri", pasque je doute que tu aies pu débugger ton truc sans un prog convenable.
allez quoi, juste une liste aléatoire que tu tries avant de l'afficher!
Au passange, je signale que sur mon cpu 1.4Ghz cet algo trie UN MILLIARD de nombre en 1 seconde environ.
C'est tellement énorme que je suis certain de m'etre gouré quelque part :)
bon allez bonne nuit tt le monde
Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 20102 27 oct. 2004 à 00:26
ben dis donc t'es un rapide toi!
j'ai meme pas le temps de finir de lire la page que tu m'as filée que déja tu postes!
bon ben c'est cool, j'aurais pas besoin de tou réécrire.
Merci c'est sympa, je vais jeter un coup d'oeuil a la source (gare a toi si tu a fait copier-coller :D )
++
PS: dans quel but t'intéresses-tu au classement? juste pour le fun?
29 oct. 2004 à 23:33
c'est gentil de mettre en ligne une source qui marche pas.
28 oct. 2004 à 11:57
Tu veux pas nous faire une jolie MAJ ac un exemple fonctionnel cette fois? la je commence a saturer :).
28 oct. 2004 à 11:08
Thanks
28 oct. 2004 à 00:06
En fait un tableau c'est un pointeur qui pointe sur une plage mémoire.
donc : ptr+a est équivalent à &(ptr[a])
et : *(ptr+a) est équivalent à ptr[a]
27 oct. 2004 à 23:53
Le template attend une référence .. donc faut faire plutot un truc du style :
MaStruct *ptr;
ptr = sortarray+a;
sortarray.AddElement(ptr,ptr->dist);
Il y a quatre passes parce que le tri de chaque passe se fait sur chaque octet du poid le plus faible au poid le plus fort. On peut limiter à deux ou trois passes si on ne trie que des entiers définis sur 16 ou 24 bits.
27 oct. 2004 à 21:46
en tt cas bravo pour la vitesse de tri...
27 oct. 2004 à 21:43
c'était écrit en haut.
révises ton anglais :)
27 oct. 2004 à 21:40
Tu parlais d'une page qui expliquait cela, et ... j'aurais bien aimé l'obtennir...
J'en suis resté à Qsort... enfin a moins qu'il y ai quelques conneries de rédigés dans linux mag, Qsort est le plus rapide quand on ne recopies pas le tableau autre part...
Arapement, ta technique est bien meilleur que Qsort...
27 oct. 2004 à 21:16
j'ai un pb en voulant faire un classement de mes particules:
jai une classe Particules:
class Particules{
public:
...
float dist;// c'est la distance entre la particule et la caméra
}
Particules Particule[1000];// on crée 1000 particules (nan pas possible! :) )
dans init():
CSort sortarray;
plus loin:
sortarray.AddElement(Particule+0,Particule[0].dist);
Ca ne differe en (presque) rien a l'exemple que tu donnais, et pourtant le compilo me dit que le premier argument de AddElement n'est pas bon,que c'est un Particules* et qu'il lui faut un Particules &* (qqch comme ca, je cite de memoire).
Ou est l'erreur?
Par ailleurs, il y a 2 choses que je ne comprends pas:
- un tri Radix d'entiers se fait, si j'ai bien compris, en une seule passe; or la t'en fais 1+3*1=4. Pourquoi?
- dans la fonction AddElement, tu mets "allstructs+a" comme premier parametre.Or allstructs est un tableau de MaStruct et a un entier; et la fonction prend _T&_t comme premier parametre. Comment une classe + un entier == une adresse de classe????
voila, merci de tes réponses.
++
Ad
27 oct. 2004 à 01:19
Je connais cet algo depuis pas mal de temps en fait : il y a fort longtemps, genre aux temps préhistoriques, lorsque les cartes 3d n'existaient pas et qu'on voulait afficher du triangle à gogo, il fallait savoir trier rapidement.
En fait, encore aujourd'hui, on a toujours besoins d'algos de tris pour la 3d : exemple tes particules ou bien pour les faces en opacité ( blend alpha, 1-alpha ). C'est pour ça que ce template traine dans mon moteur.
Voila voila ...
Si tu trouves des bugs, n'hésite pas à me les signaler.
27 oct. 2004 à 00:37
27 oct. 2004 à 00:33
par contre tu pourrais pas nous faire un exemple en peu plus "fleuri", pasque je doute que tu aies pu débugger ton truc sans un prog convenable.
allez quoi, juste une liste aléatoire que tu tries avant de l'afficher!
Au passange, je signale que sur mon cpu 1.4Ghz cet algo trie UN MILLIARD de nombre en 1 seconde environ.
C'est tellement énorme que je suis certain de m'etre gouré quelque part :)
bon allez bonne nuit tt le monde
27 oct. 2004 à 00:26
j'ai meme pas le temps de finir de lire la page que tu m'as filée que déja tu postes!
bon ben c'est cool, j'aurais pas besoin de tou réécrire.
Merci c'est sympa, je vais jeter un coup d'oeuil a la source (gare a toi si tu a fait copier-coller :D )
++
PS: dans quel but t'intéresses-tu au classement? juste pour le fun?