Erreur de segmentation c++
f.overflow
Messages postés
10
Statut
Membre
-
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
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
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
A voir également:
- Erreur de segmentation c++
- Iptv erreur de lecture - Forum TV & Vidéo
- Erreur 0x80070570 ✓ - Forum Windows 10
- Erreur s3 bbox - Forum Bbox Bouygues
- Erreur de lecture du canal - IPTV - Forum TV & Vidéo
- Erreur 4101 - Forum Carte graphique
1 réponse
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.
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.