Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Brauche hilfe für MergeSort

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
06.05.2008, 17:11 Uhr
estela



Hallo,
ich habe versucht ein Programm zu schreiben, aber es funktioniert nicht richtig und ich verstehe nicht, wo ich das Problem habe. Es geht um MergeSort hier das Programm:


C++:
#include <cstdlib>
#include <iostream>
using namespace std;



void merge(double a[], int l, int m, int r)
{
    
     int i, j, k;
    
    double *b = new double[r+1];    
            
     i=l;  j=m+1; k=l;
  
   for(int k=l; k<=r; k++)
    {
         if((i<=m || j<=r) && (a[i] > a[j]))
        {
        b[k]=a[j];
        j=j+1;
         }
      else
        {
        b[k]=a[i];
            i=i+1;
         }    
    }
    if (i<=m)//Folge wird zurueck von B nach A
    { b[k]=a[i];
       i=i+1;
    }
    cout << b[k] << ": ";      
    
    delete [] b;
      }

void mergeSort(double a[], int l, int r)
    {
        int m;
        if (l < r)
        {
            m =(l+r)/2;            
            mergeSort(a, l, m);
            mergeSort(a, m+1, r);          
            merge(a, l, m, r);  
                      
        }
    }
      
      int main(int argc, char*argv[])

{
      int n = 5;
      double a[5]={2.8, 0.1, 4.3, 3.3, 1.3};
      mergeSort(a, 0, n) ;
      
    return 0;
}



Wenn ich das Programm Teste bekomme ich: 0.1 : 2.8 : 3.3 : 3.3 : 4.3. Wiso 3.3 verdoppelt und was ist mit 1.3??? HILFE!!!!!!!!!!!!!!!!!!!!!!!!!!!

Dieser Post wurde am 06.05.2008 um 18:50 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.05.2008, 18:51 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


weil k irgendwas ist:



C++:
int k;

for(int k ...)
{
}


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.05.2008, 19:25 Uhr
estela



Hola FloSoft... vielen Dank für Deine Antwort. Was meinst Du mit "k"? Ist falsch deklariert???
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.05.2008, 19:30 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


nö, dein k aus der schleife ist danach nicht mehr gültig, d.h dein k nach der schleife wurde nie initialisiert und ist deshalb auch undefiniert.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.05.2008, 20:35 Uhr
estela



Hallo,
das k, in "cout << b[k] << ": ";" habe ich für die Ausgabe der neuen sortierten Folgen angegeben. Ich glaube auch, dass das Problem da liegt. Ich bin keine gute Programmiererin und ich habe keine Ahnung, wie ich die Sortierte Folge ausgeben kann....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
06.05.2008, 22:20 Uhr
öni



Du hast k 2 mal initalisiert.

Codeausschnitt

C++:
int i, j, k; //<---- das erste mal hier
    
    double *b = new double[r+1];    
            
     i=l;  j=m+1; k=l;
  
   for(int k=l; k<=r; k++)  //<--- das zweite mal hier......
    {


deswegen verliert dein k schätzungsweise den Wert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
07.05.2008, 16:40 Uhr
estela



Vielen Dank für die Anmerkungen....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: