Permalänk

Bubblesortering

Tjena

Kan ni hjälpa mig med bubblesortering?

int[] myList = new int[] { 7, 4, 1, 9, 2}; int max = myList.Length - 1; for (int i = 0; i < max; i++) { int left = max - 1; for (int j = 0; j < left; j++) { if (myList[j] > myList[j+1]) { int temp = myList[j]; myList[j] = myList[j+1]; myList[j+1] = temp; } } } for (int i = 0; i < myList.Length; i++) { Console.Write(myList[i]); }

Varför fungerar inte min kod 100%? Alltså den kriver ut 14792. Jag vill att programmet skriver ut 12479 och inte 14792.

Permalänk
Medlem

Edit måste läsa igenom nogrannare

Ska det inte vara ont left = max - i ?
För att hålla koll på vad som är sorterat?

Permalänk
Medlem

Här gör den väl bara loopen tills näst sista siffran, eftersom den bara går så länge i är mindre än max?

for (int i = 0; i < max; i++)

Då sorterar den alla utom sista siffran, och kvar är tvåan som förblir osorterad.

Visa signatur

Moderkort: Gigabyte X570 Aorus Master | CPU: AMD Ryzen R9 5900X | CPU-kylare: Noctua NH-D15 chromax.black | RAM: Corsair Vengeance LPX 64 GB (4x16) DDR4-3600 CL18 | GPU: Gigabyte RTX 4080 Eagle OC | SSD: 2 x Samsung 970 EVO Plus 1 TB NVMe + Kingston A400 480 GB + Samsung QVO860 1 TB | PSU: EVGA SuperNOVA G2 1000 W Gold | Chassi: Lian Li O11 Dynamic XL | Skärm: BenQ PD3200U @ 3840x2160 + ASUS ROG Strix XG32VQ @ 2560x1440 | Tangentbord: Corsair K68 RGB Cherry MX Red | Mus: Logitech MX Master 2S

Permalänk
Medlem

Använd debuggern så ska du nog snart se varför det blir fel.
Du börjar alltid på index 0 och kollar om det är större än värdet på nästa index. 7 är mindre än 9, nästa gång kollar du 4 som är mindre än 7. 1 är mindre än 4 och där tar det stopp.

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk
Medlem

Problemet ligger att du tar left = max-1, ändra till max-i så blir det rätt.

Dock hade jag hellre kört på att skriva det såhär.

int N = myList.Length; for(int i=0; i<N-1; i++) for(int j=0; j<N-i-1) if(myList[j] > myList[j+1]) swap

Visa signatur

10700K | NVIDIA RTX 3080

Permalänk
Skrivet av danneee:

Edit måste läsa igenom nogrannare

Ska det inte vara ont left = max - i ?
För att hålla koll på vad som är sorterat?

Tack så mycket! Dumt misstag

Permalänk
Medlem
Skrivet av Field_trip:

Tack så mycket! Dumt misstag

Det var så lite så! Loopar är lite knöliga!

Permalänk

Tack till er andra också, uppskattar hjälpen!