Per un esame ho dovuto riportare in c++ l'algoritmo di ordinamento Merge Sort da pseudocodice... penso di averlo fatto abbastanza bene... sorge solo un problema... scrivo un main() per testare il corretto funzionamento e al momento dell'esecuzione il programma si arresta senza un apparente motivo.
mi dà solo quest'errore provando il debug :
" Traceback (most recent call last):
File "/usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19-gdb.py", line 63, in <module>
from libstdcxx.v6.printers import register_libstdcxx_printers
ImportError: No module named 'libstdcxx'
Quit "
premetto che il vettore aux lo passo per referenza per evitare di ricrearlo ad ogni esecuzione del mergeSort essendo quest'ultimo ricorsivo...
Mezclar corrisponde al metodo merge e MezclaOrd al metodo ricorsivo MergeSort;
Di seguito il codice della classe completo di main():
codice:
#include <iostream>
#include <vector>
using namespace std;
void Mezclar(vector<int> & v, int izq, int m, int dch, vector<int> & aux);
void MezclaOrd(vector<int> & v, int i, int j, vector<int> & aux);
void Mezclar(vector<int> & v, int izq, int m, int dch, vector<int> & aux)
{
int i = izq;
int j = m + 1;
int k = izq;
while(i <= m && j <= dch){
if(v[i] <= v[j]){
aux[k] = v[i];
i++;
}else{
aux[k] = v[j];
j++;
}
k++;
}
if (i>m){
for(int h=j; h<=dch;h++)
aux[k]=v[h];
}else{
for(int h=i; h<=m;h++)
aux[k]=v[h];
}
for(int l = izq; l <= dch; l++)
v[l] = aux[l];
}
void MezclaOrd(vector<int> & v, int i, int j, vector<int> & aux)
{
if(i < j)
{
int m = (i + j) / 2;
MezclaOrd(v, i, m, aux);
MezclaOrd(v, m + 1, j, aux);
Mezclar(v, i, m, j, aux);
}
}
int main() {
vector <int> n;
vector <int> v;
v.push_back(4);
v.push_back(3);
v.push_back(14);
v.push_back(42);
v.push_back(43);
MezclaOrd(v,0,v.size(),n);
for (unsigned int i=0; i<v.size(); i++)
cout<<v[i];
}
Ringrazio in anticipo chiunque cerchi di aiutarmi.