Permalänk

Bubblesort C#

Hej hoj!

Är det någon som skulle vilja komma med några tips?
Det strular lite här som ni säkert kan se

Tacksam för tips.

public static void Bubblesort(City[] cities1)
{
int max = cities1.Length - 1;

for (int i = 0; i < max - 1; i++)
{
int nrLeft = max - i;

for (int j =0; j < nrLeft; j++)
{
if (cities1[j] > cities1[j+1])

{
int temp = cities1[j];
cities1[j] = cities1[j + 1];
cities1[j + 1] = temp;
}

Permalänk
99:e percentilen

Börja med att lösa syntaxfel såsom omatchade klammerparenteser. Beskriv vidare alltid på vilket sätt det ”strular” när du ber om hjälp.

Och använd [code] när du klistrar in kod, så blir det lättare att läsa den.

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
Medlem
Skrivet av henrik-linust:

Hej hoj!

Är det någon som skulle vilja komma med några tips?
Det strular lite här som ni säkert kan se

Tacksam för tips.

public static void Bubblesort(City[] cities1) { int max = cities1.Length - 1; for (int i = 0; i < max - 1; i++) { int nrLeft = max - i; for (int j = 0; j < nrLeft; j++) { if (cities1[j] > cities1[j + 1]) { int temp = cities1[j]; cities1[j] = cities1[j + 1]; cities1[j + 1] = temp; } } } }

Formaterade det och smackade på code-taggar.

Det är svårt att prata om sorteringsalgoritmer i detta stadie. Allt är hyfsat rätt men alla "- 1" ligger lite knasigt.
Om du tar bort allt utom den första loopen så ser du att den kommer aldrig att gå igenom hela listan. Då det evalueras till "cities1.Length - 1 - 1" vilket betyder att det sista elementet kommer aldrig att besökas.

När man skriver sorteringsalgoritmer från början så kan det vara bra att namnge variablerna så det blir mer semantiskt och intuitivt att förstå koden. Exempelvis kan "i" döpas om till "outerIndex" och "j" till "innerIndex" eller "nestedIndex". Då kan man förstå att "outerIndex" är indexet som itererar över alla element i arrayen. "innerIndex"/"nestedIndex" är den nästlade for-loopen och if-satsen i den är det som faktiskt gör operationerna.
Det går ju att läsa och förstå detta nu också även om det är mycket svårare, speciellt om man upptäcker att något är fel.

Om du döper om "cities1" till "cities" så blir det också enklare att läsa koden.

Jag rekommenderar att du läser på bubblesort och vad den ska göra, steg-för-steg. Det går inte att implementera något som man inte förstår.

Sista rekommendationen är att du filar på en print-metod som du kan kalla på efter varje iteration av outerIndex är gjord. Då kan du följa steg-för-steg vad din sorteringsalgoritm gör och på så vis granska var det går fel. Print-metoden bör alltså skriva ut nuvarande utseende av din array.

Lycka till!

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem
Skrivet av Leedow:

Sista rekommendationen är att du filar på en print-metod som du kan kalla på efter varje iteration av outerIndex är gjord. Då kan du följa steg-för-steg vad din sorteringsalgoritm gör och på så vis granska var det går fel. Print-metoden bör alltså skriva ut nuvarande utseende av din array.

Det kan man förstås göra, och det kan förmodligen ge resultat, men det vore i mitt tycke ännu bättre att lära sig utnyttja verktygen man har bättre istället för att börja göra debugutskrifter som förstahandsalternativ.

Eftersom detta gäller C# så gör jag nu antagandet att TS jobbar i Visual Studio, som ju har en utmärkt integrerad debugger.
Och då skulle debugger-avsnittet i Microsofts "getting started"-del av dokumentationen nog vara läsvärt som en startpunkt: https://docs.microsoft.com/en-us/visualstudio/get-started/csh...

Att på ett tidigt stadie sätta av en stund till att lära sig detta verktyg och sedan kunna stega runt i koden och se vad som verkligen händer, kunna titta på alla värden i varje steg, osv, betalar sig nog snabbt jämfört att strössla debugutskrifter och "torrköra" koden i huvudet (särskilt då det sistnämnda är extra svårt för en nybörjare).

Visa signatur

Desktop spel m.m.: Ryzen 9800X3D || MSI X870 Tomahawk Wifi || MSI Ventus 3x 5080 || Gskill FlareX 6000 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Arbetsstation: Ryzen 7945HX || Minisforum BD790i || Asus Proart 4070 Ti Super || Kingston Fury Impact 5600 65 GB || WD SN850 2TB || Samsung 990 Pro 2TB || Fractal Ridge
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304