Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Algoritmo di ordinamento MergeSort in C++ problema esecuzione main

    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.

  2. #2
    L'errore in questione non ha nulla a che vedere con il tuo programma, è un problema di configurazione/installazione di gdb.
    http://askubuntu.com/questions/34587...xx-v6-printers
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.