Bubble sort werkt niet naar behoren

Status
Niet open voor verdere reacties.

timo0909

Gebruiker
Lid geworden
6 aug 2008
Berichten
9
Hoi,

Ik ben bezig geweest met het sorteren van een list met behulp van bubble sort. Dit werkt om het maar zo te noemen half.

[JS]int hoeveel = List.getItemCount();
String[] Array;
Array=new String[hoeveel];
String temp;

for(int i=0;i<hoeveel;i++){
Array=List.getItem(i);
}

for(int x=1;x<hoeveel;x++)
{
for(int y=0;y<hoeveel-x;y++)
{
if(Array[y].compareTo(Array[y+1])>0)
{
temp=Array[y];
Array[y]=Array[y+1];
Array[y+1]=temp;

}
}
}
for(int i=0;i<hoeveel;i++){
List.remove(i);
List.add(Array);
}[/JS]

Dit stukje code vergelijkt dus of het getal b 'groter' (later in het alfabet komt) dan bijvoorbeeld a, b wordt dan getoond na a.
Zoals ik begon, het werkt wel, maar het probleem komt, wanneer ik nogmaals op de sorteerknop druk.

Voorbeeld:
Nog niet gesorteerd:
B
A

Na sorteren:
A
B

Nogmaals op sorteren klikken:
B
B

Ik weet niet waarom die dit doet, maar hij gooit mijn A dan dus weg. Dit zal waarschijnlijk een fout in het stukje code zijn, maar ik kom tot dusver er niet uit.

Alvast bedankt voor de hulp,
Timo
 
PHP:
for(int i=0;i<hoeveel;i++){
    List.remove(i);
    List.add(Array[i]);
    }

Een dergelijk stukje code kan je het best uit je geheugen branden. Onthoud gewoon dat dynamisch objecten verwijderen en toevoegen in 1 lijst in 1 loop iteratie altijd miserie met zich meebrengt.

Waarom werkt het de eerste keer wel?:
Je hebt:
PHP:
List = {B, A}
Array = {A, B}

in de loop:
i = 0;
List.remove(0); // List = {A}
List.add(Array(0)); // List = {A,A'} (ik de tweede A hier A' zodat je ze duidelijk kan onderscheiden welke A er al stond en welke weggaat

i = 1
List.remove(1); // list = {A}  de zojuist toegevoegde A' is terug weg, dus de toevoeging in de vorige stap was nutteloos
List.add(Array(1)); // list = {A, B}

Zoals je ziet heb je toevallig de goeie lijst, na nog een keer drukken op sort:
je hebt:
PHP:
List = {A, B}
Array = {A, B}

in de loop:
i = 0;
List.remove(0); // List = {B}
List.add(Array(0)); // List = {B,A'} (ik de tweede A hier A' zodat je ze duidelijk kan onderscheiden  welke A er al stond en welke weggaat

i = 1
List.remove(1); // list = {B}  de zojuist toegevoegde A' is terug weg, dus de toevoeging in de vorige stap was nutteloos
List.add(Array(1)); // list = {B, B'} // nieuwe B = B'

Het probleem wat je hier hebt is dat je in de lijst op een specifieke plaats gaat verwijderen maar steeds achteraan gaat toevoegen.

Beter lijkt me:
PHP:
List.clear();

en dan de lege lijst opvullen.

En btw, ik geloof dat bubble sort stopt van zodra er geen swap meer gedaan wordt. Je moet m.a.w. nog bijhouden of er een swap heeft plaatigevonden of niet
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan