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():
Ringrazio in anticipo chiunque cerchi di aiutarmi.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]; }

Rispondi quotando