Mergesort sortiert nicht zu ende

Orb

Mitglied
Ich bing erade dabei einen Mergesort zu programmieren:

jetzt hab ich das problem das er nicht bis zum ende sortiert: sprich er fängt zwar an die einzelnen Arrayelemente zu vertauschen stoppt aber bevor er fertig ist :eek:

Ich vermute das etwas mit den Schleifen im Unteren Teil nciht stimmt. =/


public void sortieren( Sortable[] in_xArray )
{
setVergleiche(0);

m_xSorter = in_xArray.clone();

arrayTeilen( 0, in_xArray.length-1 );
}

private void arrayTeilen( int in_iLinks, int in_iRechts )
{
if( in_iLinks < in_iRechts )
{
int iMitte = (in_iRechts+in_iLinks)/2;
arrayTeilen( in_iLinks, iMitte );
arrayTeilen( iMitte+1, in_iRechts );
tauschenEinfügen( in_iLinks, in_iRechts );
}
}



private void tauschenEinfügen( int in_iLinks, int in_iRechts )
{
int iMitte = (in_iLinks + in_iRechts)/2;
int iLinks = in_iLinks;
int iLinksEnde = iMitte;
int iRechtsStart = iMitte + 1;
int iRechtsEnde = in_iRechts;
int iLinksHelfer = in_iLinks;

Sortable[] xHelfer = m_xSorter.clone();


while( ( iLinks <= iLinksEnde ) && ( iRechtsStart <= iRechtsEnde ) )
{
countVergleiche();
//Vergleichen der Beiden Hälften, und anschließendes entsprechendes Tauschen
if( xHelfer[iLinks].compareTo( xHelfer[iRechtsStart] ) <= 0 )
{
m_xSorter[iLinks] = xHelfer[iLinksHelfer];
iLinksHelfer++;
}
else
{
m_xSorter[ iLinks ] = xHelfer[iRechtsStart];
iRechtsStart++;
}
iLinks++;
}

//Anfügen des Rests aus der linken Hälfte
while( iLinksHelfer <= iLinksEnde )
{
m_xSorter[iLinks] = xHelfer[ iLinksHelfer ];
iLinks++;
iLinksHelfer++;
}
//Anfügen des Rests aus der rechten Hälfte
while( iRechtsStart <= iRechtsEnde )
{
m_xSorter[iLinks] = xHelfer[ iRechtsStart ];
iLinks++;
iRechtsStart++;
}

m_Sortiert = m_xSorter;
}
 
Zuletzt bearbeitet:
ich hab den Teil komplett neu geschrieben mit einer for-Schleife und ein paar verschachtelten if/else Blöcke... is wesentlich übersichtlicher und entsprechend besser zu debuggen^^
 
Zurück