Tri rapide pas rapide

Re: Tri rapide pas rapide

par Delestre Nicolas,
Nombre de réponses : 0
Bonjour,

Après quelques minutes d'analyse, je crois avoir identifier votre problème, vous allez voir, c'est vicieux....

Le problème ne vient pas d'une erreur dans votre algorithme du tri rapide mais vient d'une mauvaise utilisation de memcpy dans la fonction benchmarkerUnTri. Dans votre utilisation de la fonction memcpy, comme troisième paramètre effectif, vous donnez un nombre d'éléments alors qu'il faut donner un nombre d'octets. Il aurait fallu passer nbElements*sizeof(long int) plutôt que nbElements.

Et vous pourriez me dire en quoi cela affecte le temps d'exécution de triRapide ? En fait vous ne copiez dans la zone mémoire temporaire uniquement le premier 1/4 des données, les 3 autres 1/4 des données de la zone temporaire restent inchangés après le memcpy. Or d'un appel à fonction benchmarkerUnTri à l'autre, l'adresse retournée par memcpy ne change pas après le tri par insertion (vous pouvez vous en rendre compte si vous affichez cette adresse juste après le malloc: printf("%p",(void*)temp);). Donc les entiers des 3 derniers 1/4 de cette zone mémoire sont déjà triés par le tri par insertion. Et donc le tri rapide est lent...

J'espère avoir été clair...

Cordialement.