Java Mergesort graphisch darstellen

Crixton

New member
Hi,

ich soll in informatik ein java projekt gestalten.
In diesm Projekt geht es darum den Mergesort graphisch darstellen zu lassen.
In diesem Fall muss man einen Roboter(Robot Karol) eine Zufallsgenerirte Mauer sortieren lassen.

Soweit so gut.
Der Mergesort Sortiert die Mauer theoretisch schon, also er sortiert die Array werte aber der Roboter läuft noch nicht.
Den Mergesort hab ich mal an einem einfachen array ausprobiert und er sortiert die Zahlen von klein nach groß.
Jetz muss der Roboter noch laufen lernen und die Mauerelmente sortieren.
Als Code hab ich bis jetzt:

In diesem Fall ist der wichtel ein Objekt der Roboterklasse, also er ist Robotkarol!



Code:
public void SortierAlgorithmus4 () {
        sop("Sortieralgorithmus: Mergesrot");
        mergeSort(Mauerkopie);
        wichtel.zumAnfangLaufen();
        wichtel.nachLinksLaufen();
           
    }
    
 
    public  void mergeSort( int [ ] a ) {
        int [ ] tmpArray = new int[ a.length ];
        mergeSort( a, tmpArray, 0, a.length - 1 );
    }
    
    /**
     * Internal method that makes recursive calls.
     * @param a an array of int items.
     * @param tmpArray an array to place the merged result.
     * @param left the left-most index of the subarray.
     * @param right the right-most index of the subarray.
     */
    private void mergeSort( int [ ] a, int [ ] tmpArray,
            int left, int right ) {
        if( left < right ) {
            int center = ( left + right ) / 2;
            mergeSort( a, tmpArray, left, center );
            mergeSort( a, tmpArray, center + 1, right );
            merge( a, tmpArray, left, center + 1, right );
        }
    }
    
    /**
     * Internal method that merges two sorted halves of a subarray.
     * @param a an array of int items.
     * @param tmpArray an array to place the merged result.
     * @param leftPos the left-most index of the subarray.
     * @param rightPos the index of the start of the second half.
     * @param rightEnd the right-most index of the subarray.
     */
    private  void merge( int [ ] a, int [ ] tmpArray,
            int leftPos, int rightPos, int rightEnd ) {
        int leftEnd = rightPos - 1;
        int tmpPos = leftPos;
        int numElements = rightEnd - leftPos + 1;
        
        // Main loop
        while( leftPos <= leftEnd && rightPos <= rightEnd )
            if( a[ leftPos ] <= ( a[ rightPos ] )  )
            {
                tmpArray[ tmpPos++ ] = a[ leftPos++ ];
                wichtel.zuWeltPositionLaufen(leftPos);
                vertauscheMauerElemente(leftPos,rightPos);
            }
            
                
            else
                tmpArray[ tmpPos++ ] = a[ rightPos++ ];
                
                
        
        while( leftPos <= leftEnd )    // Copy rest of first half
            tmpArray[ tmpPos++ ] = a[ leftPos++ ];
            
        
        while( rightPos <= rightEnd )  // Copy rest of right half
            tmpArray[ tmpPos++ ] = a[ rightPos++ ];
            
        
        // Copy tmpArray back
        for( int i = 0; i < numElements; i++, rightEnd-- )
            a[ rightEnd ] = tmpArray[ rightEnd ];
    }


jetz muss ich noch die methoden einfügen dass der Wichtel an den richtigen stellen (denk mal das ist während dem main loop) zu dem richtigen Arrayelemt läuft und den Sortiervorgang graphisch darstellen kann.
Also ich muss die methoden dass er zu dem jeweiligen Mauerelment läuft , das gerade sortiert wird einfügen und die Methode dass er es vertauscht.
Bitte um hilfe

PS:Falls noch jemand Lust hat mir den Mergsort anhand von diesem code genauer zu erklären wäre ich ihm sehr dankbar.
Ich hab ihn zwar grob verstanden bloß ich habe noch einen zweiten PseudoCode gefunden, der war viel länger und hatte nur 2 methoden drin und war auch der mergesort.
 

Online-Statistiken

Zurzeit aktive Mitglieder
10
Zurzeit aktive Gäste
35
Besucher gesamt
45

Beliebte Forum-Themen

Zurück
Oben Unten