Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1678 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  probleme de compréhension sur tri quick sort

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme de compréhension sur tri quick sort

n°505642
neo9205
Posté le 02-09-2003 à 19:25:15  profilanswer
 

Me voici enfin dans la bonne rubrique  :D  
:hello:
Avant de comparer les 2 éléments entre eux et ce jusqu'au séparateur, je comprend :
 
void qsort(int arr[],int lidx,int ridx)
{
 
 int mid,e,buffer;//mid=séparateur,e=index de repérage du séparateur
 
 if(lidx>=ridx) //si au moins 2 éléments...
  return;
 
 mid=(lidx+ridx)/2; //ici, on calcule ou le séparateur va se trouver...
 
        //On permutte le contenu du séparateur avec celui du 1er élément de manière à ne pas etre gêné avec le séparateur qui serait en plein milieu du tableau...
 buffer=arr[mid];
 arr[mid]=arr[lidx];
 arr[lidx]=buffer;
 
 e=lidx;//on copie l'index du 1er élément dans e
 
 for(int k=lidx+1;k<=ridx;k++)//Pour une recherche allant de l'index 1 à la fin du tableau à trier
 
  if(arr[k]<arr[lidx])//Si l'élément suivant est inférieur au précédent...
  {
   
                e++; //ici on incrémente l'index ou le séparateur se situe (afin de le retrouver plus tard...)
           
                //Puis permutation...
 
J'espère que j'ai au moins bon dans mes commentaires...
 
Puis c'est pour la fameuse permutation qu'il y a un truc vraiment bizzare ! Si on prendre un tableau de 5 éléments (7,1,2,10,9) par exemple et que l'on simule le programme dès son lancement, voici ce que je comprends :
 
Après ça :
buffer=arr[mid];
arr[mid]=arr[lidx];
arr[lidx]=buffer;
 
On obtient ça du tableau :
(2,1,7,10,9)(du au placement en début de tableau du séparateur)
 
Début de simulation...1ère passe du for... k=lidx+1=0+1=1
lidx=0...
for(int k=lidx+1;k<=ridx;k++)
   if(arr[k]<arr[lidx]) //si arr[1] (valeur :1)<arr[0] (valeur :2)
   {
       e++;
       buffer=arr[e];//on met arr[1] dans le buffer (puisque e=1)
       arr[e]=arr[k];//on met dans arr[1] arr[1] !!! j'en vois donc pas l'intérêt !
       arr[k]=buffer;//et on met le contenu du buffer(arr[1]) dans arr[1] ???
    }
 
Si quelqu'1 peut m'éclairer, ça serait bien gentil :) car je vois vraiment pas ou est mon erreur de compréhension...(le prog est bon, il vient d'un livre...)
 
voici quand meme la fin du prog :
buffer=arr[e];
arr[e]=arr[lidx];
arr[lidx]=buffer;
   
qsort(arr,lidx,e-1);//tri du sous tableau de gauche
qsort(arr,e+1,ridx);//tri du sous tableau de droite
}


Message édité par neo9205 le 02-09-2003 à 19:37:37
mood
Publicité
Posté le 02-09-2003 à 19:25:15  profilanswer
 

n°505646
neo9205
Posté le 02-09-2003 à 19:28:08  profilanswer
 

Voici le passage que je ne comprend pas :
e++;
buffer=arr[e];
arr[e]=arr[k];
arr[k]=buffer;
 
Il me semble qu'étant donné les valeurs de k et e (qui sont tout le temps égale) on échange pas 2 valeurs entre elles mais une valeur entre elle

n°505656
neo9205
Posté le 02-09-2003 à 19:39:38  profilanswer
 

Personne pour m'aider sur ce petit algo qui a l'air en apparence si simple... :(

n°505739
Krueger
tout salaire demande dutravail
Posté le 02-09-2003 à 20:38:17  profilanswer
 

Peu importent les valeurs de k et e, c'est bien une échange de valeur.


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
n°505746
neo9205
Posté le 02-09-2003 à 20:47:36  profilanswer
 

Krueger a écrit :

Peu importent les valeurs de k et e, c'est bien une échange de valeur.


 
Les valeurs de k et e ont de l'importance je pense car ce sont des index de tableau : je vois pas d'intéret à échanger la valeur de arr[3] avec celle de arr[3]...puisqu'elles sont identiques  :??:

n°506081
Krueger
tout salaire demande dutravail
Posté le 03-09-2003 à 09:31:07  profilanswer
 

Ton exemple est peut-être un peu particulier : la valeur médiane, 7, est déjà bien placé dans la première itération. Essaie de réessayer avec une autre liste.


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
n°506110
neo9205
Posté le 03-09-2003 à 09:59:43  profilanswer
 

Krueger a écrit :

Ton exemple est peut-être un peu particulier : la valeur médiane, 7, est déjà bien placé dans la première itération. Essaie de réessayer avec une autre liste.


 
Non la valeur médiane c'est 2 et elle ne peut pas etre déja bien placé puisque ce n'est pas la valeur la plus petite.A la 1ere itéraion tu dois tester si 1 est inférieur à 2 et comme c'est le cas,tu dois les permutter.


Message édité par neo9205 le 03-09-2003 à 10:03:56
n°506117
Krueger
tout salaire demande dutravail
Posté le 03-09-2003 à 10:11:52  profilanswer
 

En effet. Je ne suis décidément pas dans mon assiette ce matin. :sarcastic:
 
Je vais essayer de voir ça plus en détail avant de reposter.


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
n°506119
neo9205
Posté le 03-09-2003 à 10:14:33  profilanswer
 

Krueger a écrit :

Ton exemple est peut-être un peu particulier : la valeur médiane, 7, est déjà bien placé dans la première itération. Essaie de réessayer avec une autre liste.


 
J'ai changé les valeurs du tableau et en effet j'ai eu autre chose que des échanges du type entre arr[1] et arr[1], j'en conclu donc que j'ai pas bien compris le fonctionnement de cet algorithme du fait que la valeur médiane doit etre placée en début de tableau avant chaque tri.
 
Quelqu'un pourrait m'expliquer le fonctionnement de ce tri dans ce programme que voici :
 
void qsort(int arr[],int lidx,int ridx)
{
 
 int mid,e,buffer;
 
 if(lidx>=ridx)
  return;
 
 mid=(lidx+ridx)/2;
 
 buffer=arr[lidx];
 arr[lidx]=arr[mid];
 arr[mid]=buffer;
 
 e=lidx;
 
        for(int k=lidx+1;k<=ridx;k++)
  if(arr[k]<arr[lidx])
  {
   e++;
   buffer=arr[e];
   arr[e]=arr[k];
   arr[k]=buffer;
   
   
  }
 buffer=arr[e];
 arr[e]=arr[lidx];
 arr[lidx]=buffer;
   
 qsort(arr,lidx,e-1);//tri du sous tableau de gauche
 qsort(arr,e+1,ridx);//tri du sous tableau de droite
}
 
Merci d'avance :hello:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  probleme de compréhension sur tri quick sort

 

Sujets relatifs
probleme module PHP chez amen[WML] Probleme sur mon site wap Erreur de balise
problème mise à jour php 4.3.3(php4ts.dll)problème de mysql
[JAVA] prob de compréhension pour L'instruction continue !![JS sous Mac] Problème tout idiot :(
petit problemeprobleme avec RegEx
Positionnement avec CSS: Problème[python / Apache] Problème de récupération de l'utilisateur
Plus de sujets relatifs à : probleme de compréhension sur tri quick sort


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR