# Mergesort



## Houly (3. Apr 2009)

Hallo,

ich habe ein Problem bei dem Sortierverfahren 'MergeSort'.
Meine Zahlen werden unsortiert ausgegeben oder es kommen nur Nullen.
Ich denke das die MergeSort MEthode ok ist und es an der Ausgabe liegt.
Musste es als void Methode schreiben, weil es 3 Eingangsparameter hat und die anderen nur ein.

Hier ist meine Methode + merge Methode und eine für die Ausgabe.

[HIGHLIGHT="Java"]
 public static void mergeSort(int[] a,int links, int rechts) {
        if (rechts <= links) return;
        int mitte = (links + rechts) / 2;
        mergeSort(a,links,mitte);
        mergeSort(a,mitte+1,rechts);
        merge(a,links,mitte,rechts); 
    }

    /**
     * Methode merge für das Sortierverfahren mergeSort
     */
    public static void merge(int[] a,int links,int mitte,int rechts) {


      int i = links;
      int j = mitte +1;
      int k = links;

      int[] b = new int[a.length];

      for(i = 0; i < a.length; i ++){
            b_ = a;
      }
      while((i <= mitte) && (j <= rechts)) {
        if(b <= b[j]) {
            a[k] = b;
            k += 1;
            i += 1;

        }else {
            a[k] = b[j];
            k += 1;
            j += 1;
        }
      }  

      while (i <= mitte) {
        a[k] = b;
        k += 1;
        i += 1;
      }

    }  

    public static void ausgebenMerge(int[] a) {
        for(int i=0; i<a.length; i++) {
            System.out.println(a);
        }
    }


}
[/HIGHLIGHT]

Ausgegeben wird es so:

[HIGHLIGHT="Java"]
        case 4:
            System.out.println("Ihre Zahlen sortiert: ");
            mergeSort(zahlen,0,a-1);
            ausgebenMerge(zahlen);
            break;
[/HIGHLIGHT]

Zahlen Eingabe erfolgt so:

[HIGHLIGHT="Java"]
        // Abfrage für die Anzahl der zu sortierenden Zahlen
        a = TastaturEingabe.readInteger("Wieviele Zahlen moechten Sie sortieren: ");
        int[] zahlen = new int[a];
[/HIGHLIGHT]
Hat jmd eine Ahnung wo der Fehler liegt?

Gruß_


----------



## faetzminator (3. Apr 2009)

wie wärs, wenn du das "neue" array leweils zurückgeben würdest?


----------



## 0x7F800000 (3. Apr 2009)

Houly hat gesagt.:


> mergeSort(a,mitte+1,rechts);


Vollbremsung. Wenn sich diese "+1" "-1"-Indexfehler in den code einmal reinschleichen, kriegt man die nie weder raus, weder mit debugger noch sonstwie.

=> linken index immer INKLUSIV, den rechten dagegen immer EXKLUSIV übergeben

d.h wenn du 8 Objekte sortieren willst, im array also indizes:

```
01234567
```

hast, dann teilst du das so auf:


```
[0,8)
[0,4) [4,8)
[0,2) [2,4) [4,6) [6,8)
[0,1) [1,2) [2,3) [3,4) [4,5) [5,6) [6,7) [7,8)
```

und nicht irgendwie mit beiden indizes inklusiv, also irgendsowas bescheuertes:

```
[0,7]
[0,3][4,7]
...???
```


----------



## Käptn Blaubär (3. Apr 2009)

Houly hat gesagt.:


> [highlight="Java"]
> // Abfrage für die Anzahl der zu sortierenden Zahlen
> a = TastaturEingabe.readInteger("Wieviele Zahlen moechten Sie sortieren: ");
> int[] zahlen = new int[a];
> [/highlight]



Kann es sein das du sowieso nur Nullen im Array hast und die sortierst?
Und (rein aus Neugier) warum machst du ein MergeSort über Arrays?


----------



## Houly (6. Apr 2009)

faetzminator hat gesagt.:


> wie wärs, wenn du das "neue" array leweils zurückgeben würdest?



Gut über die erste for-Schleife kopier ich den inhalt aus array a ja ins hilfsarray, aber selbst wenn ich das weglassen würde, müsste er ja das haupt array a ausgeben, oder?




0x7F800000 hat gesagt.:


> Vollbremsung. Wenn sich diese "+1" "-1"-Indexfehler in den code einmal reinschleichen, kriegt man die nie weder raus, weder mit debugger noch sonstwie.
> 
> => linken index immer INKLUSIV, den rechten dagegen immer EXKLUSIV übergeben



Versteh ich nicht ganz. Tut mir leid bin noch Anfänger!
Die "mergeSort" Methode wurde vom Professor vorgegeben, habe nur den Rest
geschrieben.




Käptn Blaubär hat gesagt.:


> Kann es sein das du sowieso nur Nullen im Array hast und die sortierst?
> Und (rein aus Neugier) warum machst du ein MergeSort über Arrays?



Nein, nachdem man die Anzahl der Zahlen eingegeben hat, werden Random Zahlen generiert. Habe ich jetzt oben im Code nicht mit aufgeführt!


----------

