Tri rapide pas rapide

Tri rapide pas rapide

par Saunier Mathis,
Nombre de réponses : 1

Bonjour Monsieur,

Nous avons vu ensemble que certaines implémentations du tri rapide avaient une complexité en n² peu importe la situation. Cela pose un problème et nous n'avons pas trouvé la source de celui-ci durant le TP.

Je vous envoie donc ce message, selon vos consignes, pour vous rappeler de regarder nos codes sur Ubiquity (Louanne Janneau ou Mathis Saunier).

Bonne fin de journée

Mathis Saunier 


En réponse à Saunier Mathis

Re: Tri rapide pas rapide

par Delestre Nicolas,
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.