Erreur de segmentation c++

Fermé
f.overflow Messages postés 10 Date d'inscription samedi 14 juillet 2012 Statut Membre Dernière intervention 26 août 2012 - 31 juil. 2012 à 22:49
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 31 juil. 2012 à 23:24
Bonjour,

je suis débutant en c++ et pour m'entrainer j'ai codé une fonction de trie de quickshort mais qu'oon je compile et jexecute il me dit erreur de segmentation

#include <iostream>
#include <vector>
using namespace std;

void quickshort(vector<int>&);
int main()
{
int n;
cout << " entrer la taille du taleau " << endl;
cin >> n;

vector<int> v(n);
for ( int i(0); i < v.size(); i++)
{
cout << "v = "; cin >> v[i];
}


cout << " le tableau trié est : " << endl;

quickshort( v);
for ( int i(0); i < v.size(); i++)
cout << v[i] << " ";

cout << endl;
return 0;
}

void quickshort(vector<int> &v)
{
int temp;
if ( v.size() == 2)
{
if( v[0] > v[1])
{
temp = v[0];
v[0] = v[1];
v[1] = temp;
}

}
else
{

vector<int> plus_petit;
vector<int> plus_grand;

int pivot = v[0];
for( int i(1); i < v.size(); i++)
{
if( v[i] <= v[0] ) plus_petit.push_back(v[i]);
else plus_petit.push_back(v[i]);
}

v.clear();
quickshort(plus_petit);
for ( int i(0); i < plus_petit.size(); i++) v.push_back(plus_petit[i]);
v.push_back(pivot);
quickshort(plus_grand);
for( int i(0); i < plus_grand.size(); i++) v.push_back(plus_grand[i]);

}
}



et bonne soiré a vous tous et en meme temps est ce quequ'un pourrait me dire comment debugger en c++ et je serais reconnaisant

1 réponse

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
31 juil. 2012 à 23:24
Bonjour,

Merci d'utiliser les balises "code" (à droite du bouton "souligné") pour garder l'indentation du code.
Sinon, en lisant ton code, je ne reconnais vraiment pas l'algorithme du quick sort (et non quick short).
Tu n'utilises pas bien le pivot. Ton vecteur "plus_grand" n'est pas initialisé.
if( v[i] <= v[0] ) plus_petit.push_back(v[i]);
else plus_petit.push_back(v[i]);

La condition sert à rien, puisque dans les deux cas tu fais la même opération.

Un petit lien intéressant : https://fr.wikipedia.org/wiki/Tri_rapide où tu vois l'algorithme. Ton code doit y ressembler.
0