besoin d'aide sur tri shell
bonjour a tous, je suis etudiant en première année d'informatique et j'ai un dns a faire sur le tri shell qui consiste a prendre les valeurs comprise dans un vecteur pour ensuite les ranger en ordre croisant.Meme si je comprend les grands principes du tri j'ai de la misere a comprendre l'algo alors aidé de notre ami google j'ai tout de meme reussi a mettre au point le prog sans vraiment le comprendre d'ou mon probleme...
si quelqu'un pouvait m'expliquer en détail le fonctionnement de l'algo je lui en serait trés reconnaissant merci bien :P
voici mon codage : :bug:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| //---------------------------------------------------------------
#pragma hdrstop
#include "UntTri.h"
//---------------------------------------------------------------
#pragma package(smart_init)
Methode_tri_shell :: Methode_tri_shell(){
}
void Methode_tri_shell :: Lancer_tri_shell(int prmVectM[], int prmNbM){
int pas = 0,
j = 0,
valeur = 0; //Création et initialisation des variables
do{ //Calcul du premier pas
pas=3*pas+1 ; // valeur du pas pour lequel son efficacité est optimal
}while(pas<prmNbM);
while(pas!=0) //Tant que le pas est plus grand ou égal à 1
{
for (int i(pas);i<prmNbM;i++) // On parcourt la liste
{
valeur=prmVectM[i] ;
j=i ;
while((j>(pas-1)) && (prmVectM[j-pas]>valeur))
{
prmVectM[j]=prmVectM[j-pas];
j=j-pas ;
}
prmVectM[j]=valeur ;
}
pas=(pas-1)/3 ; //On décrémente le pas
}
} |
ps: jspere que le code est lisible la mise en page n'est pas terrible mais jai pas réussi a faire mieux dsl:?
(note du modo: utilises les balises CODE, c-a-d l'icone # dans la barre d'outils de l'éditeur de message)