Taulukon Manuaalinen Lajittelu
Pyyhkäise näyttääksesi valikon
Lajittelu on perustoiminto ohjelmoinnissa, koska sen avulla voidaan järjestää tietoa tehokkaampaa hakua, analysointia ja esittämistä varten. Vaikka C#:ssa on sisäänrakennettuja menetelmiä taulukoiden lajitteluun, lajittelualgoritmien toiminnan ymmärtäminen antaa arvokasta näkemystä algoritmiseen ajatteluun ja ongelmanratkaisuun. Manuaaliset lajittelualgoritmit, kuten selection sort, havainnollistavat, miten alkioita verrataan ja siirretään vaihe vaiheelta, kunnes taulukko on lajiteltu. Tämä ymmärrys on tärkeää tilanteissa, joissa tarvitaan räätälöityä lajittelulogiikkaa tai työskennellään ympäristöissä, joissa kirjastotuki on rajallista.
Selection sort on yksinkertainen lajittelualgoritmi, joka toistuvasti valitsee pienimmän (nousevassa järjestyksessä) tai suurimman (laskevassa järjestyksessä) alkion taulukon lajittelettavasta osasta ja siirtää sen oikealle paikalle lajiteltuun osaan.
Program.cs
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849using System; namespace ConsoleApp { public class Program { public static void Main(string[] args) { int[] numbers = { 5, 2, 9, 1, 5, 6 }; Console.WriteLine("Original array:"); PrintArray(numbers); SelectionSortAscending(numbers); Console.WriteLine("Sorted array (ascending):"); PrintArray(numbers); } public static void SelectionSortAscending(int[] array) { int n = array.Length; for (int i = 0; i < n - 1; i++) { int minIndex = i; for (int j = i + 1; j < n; j++) { if (array[j] < array[minIndex]) { minIndex = j; } } int temp = array[i]; array[i] = array[minIndex]; array[minIndex] = temp; } } public static void PrintArray(int[] array) { foreach (int num in array) { Console.Write(num + " "); } Console.WriteLine(); } } }
Valintalajittelu toimii jakamalla taulukon lajiteltuun ja lajittelemattomaan osaan. Jokaisessa vaiheessa se valitsee pienimmän alkion lajittelemattomasta osasta ja vaihtaa sen ensimmäisen lajittelemattoman alkion kanssa, jolloin lajiteltu osa kasvaa yhdellä.
Yllä olevassa koodissa käydään läpi jokainen taulukon alkio lukuun ottamatta viimeistä. Jokaiselle sijainnille i etsitään pienin arvo taulukon loppuosasta (kohdasta i + 1 loppuun asti). Kun pienempi alkio löytyy, päivitetään minIndex. Sisemmän silmukan jälkeen vaihdetaan alkio kohdassa i ja kohdassa minIndex, jolloin pienin arvo sijoitetaan nykyiseen kohtaan. Tätä prosessia toistetaan, kunnes koko taulukko on lajiteltu nousevaan järjestykseen.
Program.cs
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849using System; namespace ConsoleApp { public class Program { public static void Main(string[] args) { int[] numbers = { 3, 8, 4, 7, 2, 9 }; Console.WriteLine("Original array:"); PrintArray(numbers); SelectionSortDescending(numbers); Console.WriteLine("Sorted array (descending):"); PrintArray(numbers); } public static void SelectionSortDescending(int[] array) { int n = array.Length; for (int i = 0; i < n - 1; i++) { int maxIndex = i; for (int j = i + 1; j < n; j++) { if (array[j] > array[maxIndex]) { maxIndex = j; } } int temp = array[i]; array[i] = array[maxIndex]; array[maxIndex] = temp; } } public static void PrintArray(int[] array) { foreach (int num in array) { Console.Write(num + " "); } Console.WriteLine(); } } }
Koodi määrittelee Program-luokan, jossa on Main-metodi, joka havainnollistaa kokonaislukutaulukon lajittelua laskevaan järjestykseen käyttäen valintalajittelua. Aluksi alustetaan numbers-taulukko ja tulostetaan sen alkuperäinen sisältö. Tämän jälkeen kutsutaan SelectionSortDescending-metodia, joka lajittelee taulukon suurimmasta pienimpään. Tämä metodi etsii toistuvasti suurimman arvon lajittelemattomasta osasta ja vaihtaa sen ensimmäisen lajittelemattoman alkion kanssa. Lajittelun jälkeen ohjelma tulostaa päivitetyn taulukon, jossa alkiot ovat laskevassa järjestyksessä.
1. Mikä on valintajärjestämisen aikavaativuus?
2. Miten valintajärjestäminen eroaa kuplajärjestämisestä?
3. Miksi järjestäminen kannattaa joskus toteuttaa itse sisäänrakennettujen menetelmien sijaan?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme