Tri sélection recursif
Résolu
victoria ghabri
Messages postés
114
Statut
Membre
-
ksc -
ksc -
Bonjour,
j'ai un petit programme a exécuter ,C'est le tri sélection récursif...le problème c'est qu'il ne fonctionne pas normalement dans touts les cas..(si je donne une taille de 5 ,il ne fait presque rien ,mais si je donne 10 il ordonne le tableau normalement..
voila le code ,syntaxiquement il est correcte ,mais aparament il y a un problème au niveau de la sémantique ,s'il vous plais aidez moi ..
LE CODE (c++) :
**********
#include <iostream>
using namespace std;
void tri_selection(int start_index,int A[],int n)
{int min_index;
if (start_index<n)
{
min_index=start_index;
for(int i=start_index;i<n;i++)
{
if (A[i]<=A[min_index])
min_index=i;
int aux=A[min_index];
A[min_index]=A[start_index];
A[start_index]=aux;
//cout<<A[min_index]<<endl;
}tri_selection(start_index+1,A,n);
}
}
void saisie (int n ,int A[])
{ int i;
for( i=0;i<n;i++)
{ cout<<"donner un element"<<endl;
cin>>A[i];
}
}
void affiche(int n,int A[])
{ int i ;
for(i=0;i<n;i++)
cout<<A[i] ;}
int main()
{ int A[100];int n;
cout<<"donner la taiile n"<<endl;
cin>>n;
saisie(n,A);
affiche(n,A);
tri_selection(0,A,n);
cout<<"***********"<<endl;
affiche(n,A);
return 0;
}
*******************fin code
merciii d'avance :))))
j'ai un petit programme a exécuter ,C'est le tri sélection récursif...le problème c'est qu'il ne fonctionne pas normalement dans touts les cas..(si je donne une taille de 5 ,il ne fait presque rien ,mais si je donne 10 il ordonne le tableau normalement..
voila le code ,syntaxiquement il est correcte ,mais aparament il y a un problème au niveau de la sémantique ,s'il vous plais aidez moi ..
LE CODE (c++) :
**********
#include <iostream>
using namespace std;
void tri_selection(int start_index,int A[],int n)
{int min_index;
if (start_index<n)
{
min_index=start_index;
for(int i=start_index;i<n;i++)
{
if (A[i]<=A[min_index])
min_index=i;
int aux=A[min_index];
A[min_index]=A[start_index];
A[start_index]=aux;
//cout<<A[min_index]<<endl;
}tri_selection(start_index+1,A,n);
}
}
void saisie (int n ,int A[])
{ int i;
for( i=0;i<n;i++)
{ cout<<"donner un element"<<endl;
cin>>A[i];
}
}
void affiche(int n,int A[])
{ int i ;
for(i=0;i<n;i++)
cout<<A[i] ;}
int main()
{ int A[100];int n;
cout<<"donner la taiile n"<<endl;
cin>>n;
saisie(n,A);
affiche(n,A);
tri_selection(0,A,n);
cout<<"***********"<<endl;
affiche(n,A);
return 0;
}
*******************fin code
merciii d'avance :))))
A voir également:
- Tri par selection recursive
- Excel trier par ordre croissant chiffre - Guide
- Logiciel tri photo - Guide
- L'indice n'appartient pas à la sélection vba ✓ - Forum Programmation
- Excel trier par date ne fonctionne pas ✓ - Forum Excel
- Illustrator cadre de sélection disparu ✓ - Forum Illustrator
1 réponse
Un gros coup de debuger plus tard j'ai enfin trouve le probleme dans ton code.
Il vient de ta condition :
Tu dois tester par rapport au start_index et non par rapport au min_index qui lui ce deplace. Si tu n'as pas de chance lors de ton test (cas d'erreur typique tableau de 5 valeur : 45231)
Tu vas passer une fois et obtenir :15423
mais quand il vas tester la cinquième valeur (tu sera a : 12543) ton min_index sera egal a 3 (car tu viens juste de passer le 2 en deuxième position) donc il vas comparer ton 3 avec ton 4 et donc deplacer ton 4 ce qui genere une erreur.
Ps: a l'avenir est ce que tu pourrais espacer ton code quand tu demande de l'aide. Ca me faciliterai beaucoup le travail. Un code comme celui ci dessous est toujours plus facile a lire.
Il vient de ta condition :
if (A[i]<=A[min_index])
Tu dois tester par rapport au start_index et non par rapport au min_index qui lui ce deplace. Si tu n'as pas de chance lors de ton test (cas d'erreur typique tableau de 5 valeur : 45231)
Tu vas passer une fois et obtenir :15423
mais quand il vas tester la cinquième valeur (tu sera a : 12543) ton min_index sera egal a 3 (car tu viens juste de passer le 2 en deuxième position) donc il vas comparer ton 3 avec ton 4 et donc deplacer ton 4 ce qui genere une erreur.
Ps: a l'avenir est ce que tu pourrais espacer ton code quand tu demande de l'aide. Ca me faciliterai beaucoup le travail. Un code comme celui ci dessous est toujours plus facile a lire.
#include <iostream> using namespace std; void tri_selection(int start_index,int A[],int n) { int min_index; if (start_index<n) { min_index=start_index; for(int i=start_index;i<n;i++) { if (A[i]<=A[start_index]) { min_index=i; int aux=A[min_index]; A[min_index]=A[start_index]; A[start_index]=aux; for(int j=0;j<n;j++) { cout<<A[j] ; } cout<<endl <<A[min_index]<<endl; } } tri_selection(start_index+1,A,n); } } void saisie (int n ,int A[]) { int i; for( i=0;i<n;i++) { cout<<"donner un element"<<endl; cin>>A[i]; } } void affiche(int n,int A[]) { int i ; for(i=0;i<n;i++) { cout<<A[i] ; } } int main() { int A[100];int n; cout<<"donner la taiile n"<<endl; cin>>n; saisie(n,A); affiche(n,A); tri_selection(0,A,n); cout<<"***********"<<endl; affiche(n,A); return 0; }
victoria ghabri
Messages postés
114
Statut
Membre
5
Impècable ,ça marche !! merciii enormement... et merci aussi pour le conseil :)) il y avait aussi un preobléme d'accolade que j'ai oublié de mettre aprés le if .et merci encore
ksc
vous aurier pu faire passer 2 parametre seulement