Array an Mergesort übergeben



  • Guten Tag nochmal.

    Ich habe folgendes Problem:

    Wir mussten ein Programm schreiben, das Zahlen aus einer Textdatei einliest, und die an Mergesort übergibt.

    Ich habe ziemlich viel Zeit damit verbracht, um zu verstehen, wie man ein dynamisches Array erzeugen kann. Nun ist es so - ich habe zwar ein dynamisches Array erzeugt, ich kann es aber nicht an Mergesort übergeben. Na ja, ich glaube das liegt an meinem Array, ich glaube, ich habe immer noch nicht die Struktur so richtig verstanden.

    #include <iostream>
    #include <vector>
    #include <cstddef>
    #include <fstream>
    #include <cstdlib>
    #include <sstream>
    #include <iterator>
    #include <string>
    using namespace std;
    
    void Merge (int *a, int Anfang, int Mitte, int Ende){
    
    	int tmp[Ende - Anfang + 1], i = Anfang, j = Mitte+1;
    		for (int k=0;k<=Ende-Anfang;k++){
    			if ( (i<=Mitte) && (( j>Ende) || (a[i] < a[j]))){
    			tmp[k] = a[i];
    			i++;
    			}
    			else{
    			tmp[k]=a[j];
    			j++;
    			//cout<<a[i]<<" "<<a[j]<<endl;
    			}
    		}
    		for(int k=0; k<=Ende-Anfang;k++){
    		a[Anfang+k] = tmp[k];
    
    		}
    		for(int b=0;b<16;b++){
    		cout<<a[b]<<" ";
    		}
    		cout<<endl;
    }
    
    void MergeSort(int* a, int Anfang, int Ende){
    	if(Anfang < Ende){
    	int Mitte = (Anfang + Ende) / 2;
    
    	MergeSort (a, Anfang, Mitte);
    	//cout<<Anfang<<"  "<<Mitte<<" "<<Mitte+1<<" "<<Ende<<endl;
    	MergeSort (a, Mitte + 1, Ende);
    	Merge (a, Anfang, Mitte, Ende);
    	}
    }
    
    int main () { 
      string line; 
      vector<int> dynArr;
      ifstream datei;
      datei.open("MergeZahlen.txt", ios::binary|ios::in);
      if (datei) 
      { 
    	istream_iterator<int>iit(datei);
    	copy(iit,istream_iterator<int>(),back_inserter(dynArr));
    
            datei.close(); 
    
    	copy(dynArr.begin(),dynArr.end(),ostream_iterator<int>(cout," "));
    	cout<<endl;
      } 
    
      MergeSort(*dynArr, 0, 15); //Meine Problemzone :D
    }
    

    Ich glaube, ich will jetzt sowas wie eine Beruhigung hören, vonwegen: "Nein, Du musst nicht mit Templates und Vektorklasse arbeiten, es geht auch anders, Du musst nur dein Code hier und da ein bisschen ändern" 😃

    Ich stehe einfach gerade ein bisschen unter Zeitdruck, ich glaube nicht, dass ich es schaffe, in zwei Tagen Templates und Vektorklassen zu verstehen (allerdings verspreche ich, dass wenn ich mein nächstes Problem poste, dass ich mit diesen beiden Begriffen halbwegs umgehen kann 😃 ).

    Na ja, wenn es aber nicht anders geht, ist mir die Wahrheit auch wichtig. 😃

    Also, könnt ich mir etwas empfehlen, oder darf ich mich schon an meine Begrifflichkeit heransetzten?

    Bin für alle Vorschläge dankbar 😉

    PS. Liegt es auch unter anderem daran, dass ich an Mergesort keine Indizes übergebe? Könnte ich mir evtl. damit verhelfen, dass ich an der Funktion Mergesort etwas ändere? Oder schreibe ich hier gerade Schwachsinn?



  • Bitte verwende nächstes Mal die C++ Code Tags...

    Was für Fehler treten denn auf ?

    vector<int> a;
    int* a2 = &a[0];
    

    So konvertierst du den vector zu einem int-Pointer ^^



  • Es hat funktionier!!!!!
    Super, danke für die Hilfe!!!

    Schade (oder Gut), dass der Ratgeber nicht vor mir ist, Du hättest bestimmt einen dicken Kuss von mir gekriegt! 😃


Anmelden zum Antworten