Golang Sort Slice Primjeri

Golang Sort Slice Primjeri



Sortiranje je temeljna programska operacija koja uključuje stavljanje elemenata određenim redoslijedom. Paket za sortiranje, u kojem je Goova službena knjižnica dostupna, uključuje nekoliko funkcija za brzo sortiranje odsječaka. Razvrstavanje isječaka čest je zadatak u mnogim aplikacijama, od organiziranja podataka za prezentaciju do optimiziranja algoritama pretraživanja. Ovaj članak istražuje različite tehnike sortiranja i demonstrira njihovu upotrebu u Gou pomoću paketa sortiranja.

Primjer 1: Golang sortiranje odsječaka uzlaznim redoslijedom

Funkcija 'sort.Slice()' najistaknutija je funkcija u Gou koja preuređuje elemente isječka uzlaznim ili silaznim redoslijedom. Uzmite u obzir sljedeću ilustraciju gdje je isječak poredan uzlaznim redoslijedom:

paket glavni
uvoz (
'fmt'
'vrsta'
)
funk glavni () {
evenSlice := [] int { 10 , 2 , 8 , 4 , 0 , 6 }
fmt . Println ( 'Nerazvrstani isječak:' , evenSlice )
vrsta . Kriška ( evenSlice , funk ( ja , j int ) bool {
povratak evenSlice [ ja ] < evenSlice [ j ]
})
fmt . Println ( 'Razvrstani isječak:' , evenSlice )
}

Na početku funkcije main() definiramo isječak evenSlice s vrijednostima {10, 2, 8, 4, 0, 6}. Ovaj odsječak predstavlja zbirku parnih brojeva koji u početku nisu razvrstani. Za sortiranje isječka evenSlice, funkcija sort.Slice() koristi se s isječkom. Unutar funkcije sort.Slice(), funkcija sortiranja navedena je kao argument. Ova funkcija određuje redoslijed sortiranja uspoređujući dva elementa isječka s indeksima 'i' i 'j'. Ako je evenSlice[i] manji od evenSlice[j], vraća true; u suprotnom, vraća false. Funkcija sort.Slice() koristi ovu funkciju usporedbe za preuređivanje elemenata 'evenSlice' odsječka uzlaznim redoslijedom.







Rezultati sortiranog odsječka uzlaznim redoslijedom generiraju se na sljedećem izlaznom ekranu:





Primjer 2: Golang Sort Part Slice

Zatim se sortiranje primjenjuje na pododsječak navedenog odsječka uzlaznim redoslijedom pomoću funkcije sort.Slice() u Go.





paket glavni
uvoz (
'fmt'
'vrsta'
)
funk glavni () {
n := [] int { 9 , 7 , 3 , 5 }
početak := 0
kraj := 3
vrsta . Kriška ( n [ početak : kraj ], funk ( ja , j int ) bool {
povratak n [ početak + ja ] < n [ početak + j ]
})
fmt . Println ( n )
}

U početku stvaramo 'n' odsječak s vrijednostima [9, 7, 3, 5]. Osim toga, dvije varijable, 'start' i 'end', postavljene su na 0 odnosno 3. Ove varijable definiraju raspon indeksa u 'n' odsječku koji će biti sortirani. Zatim se poziva funkcija 'sort.Slice()' s podsječkom 'n[start:end]' kao prvim argumentom. Ovaj pododsječak sadrži elemente 'n' unutar navedenog raspona. Nakon toga, funkcija sortiranja se daje kao drugi argument unutar funkcije sort.Slice().

Ovdje ta funkcija prima dva indeksa, 'i' i 'j', koji predstavljaju elemente unutar pododsječka. Za usporedbu elemenata unutar pododsječka, funkcija sortiranja pristupa odgovarajućim elementima u izvornom odsječku koristeći početak pomak. Uspoređuje n[start+i] i n[start+j]. Zatim, funkcija sort.Slice() koristi pruženu funkciju sortiranja za preuređivanje elemenata unutar podsječka uzlaznim redoslijedom.



Sljedeći izlaz prikazuje da su elementi unutar navedenog raspona (od početka do kraja-1) sortirani, a elementi izvan raspona ostaju nepromijenjeni:

Primjer 3: Golang sortiranje cjelobrojnog odsječka pomoću funkcije Sort.Ints().

Štoviše, najprikladnija za sortiranje odsječaka cijelih brojeva je funkcija sort.Ints() bez potrebe za implementacijom prilagođenih metoda sortiranja. Djeluje izravno na cjelobrojne rezove i obavlja sortiranje na mjestu. Sljedeći program sortira navedene cijele brojeve:

paket glavni
uvoz (
'fmt'
'vrsta'
)
funk glavni () {
IntSlice := [] int { 10 , 13 , petnaest , jedanaest , 14 , 12 }
fmt . Println ( 'Nerazvrstani isječak:' , IntSlice )
vrsta . Int ( IntSlice )
fmt . Println ( 'Razvrstani isječak:' , IntSlice )
}

Prvo deklariramo i inicijaliziramo odsječak 'IntSlice' s vrijednostima [10, 13, 15, 11, 14, 12] koje predstavljaju kolekciju cijelih brojeva koji su inicijalno nerazvrstani. Zatim se poziva funkcija sort.Ints() s odsječkom 'IntSlice' kao argumentom za sortiranje 'IntSlice'. Funkcija sort.Ints() u ovom slučaju interno sortira svaki dio isječka prema optimiziranom algoritmu sortiranja. Izravno mijenja izvorni isječak, preuređujući njegove elemente u sortirani redoslijed.

Sljedeći izlaz prvo pokazuje da se prvi prikazuje nerazvrstani isječak, a zatim sortirani isječak:

Primjer 4: Golang Sort String Slice

Go također nudi funkciju sort.Strings() paketa za sortiranje koja se koristi za sortiranje odsječka nizova određenim redoslijedom. Ovdje sljedeći program pomaže u sortiranju odsječka nizova:

paket glavni
uvoz (
'fmt'
'vrsta'
)
funk glavni () {
strSl := [] niz { 'golan' , 'piton' , 'Java' , 'perl' , 'tipkalo' }
vrsta . Žice ( strSl )
fmt . Println ( strSl )
}

Prvo smo uspostavili odsječak 'strSl' s vrijednostima ['golang', 'python', 'java', 'perl', 'typescript'] koje nisu sortirane. Nakon toga sortiramo “strSl” isječak s funkcijom sort.Strings() koja razvrstava elemente isječka leksikografskim redom. Ova funkcija izravno mijenja izvorni isječak, preuređujući njegove elemente u poredani redoslijed na temelju njihovih ASCII vrijednosti.

Izlaz razvrstava odsječak niza prema rastućem načinu kako je prikazano u sljedećem:

Primjer 5: Golang Check Sort Slice pomoću funkcije IntAreSort().

Međutim, s funkcijom sort.IntsAreSorted() programa Go možemo provjeriti je li dani isječak cijelih brojeva poredan uzlaznim redoslijedom ili ne. Razmotrite sljedeći primjer programa funkcije IntAreSort() za dani odsječak:

paket glavni
uvoz (
'fmt'
'vrsta'
)
funk glavni () {
sl := [] int { - 33 , 105 , - 42 , 59 , 18 , 0 , - 3 }
fmt . Println ( 'Krestice:' )
fmt . Println ( 'Nerazvrstani isječak: ' , sl )
proizlaziti := vrsta . IntsAreSorted ( sl )
fmt . Println ( ' \n Proizlaziti:' )
fmt . Println ( 'Je li dati Slice sortiran?: ' , proizlaziti )
}

Prvo, nesortirani odsječak nasumičnih cijelih brojeva definira se kao 'sl'. Ovaj odsječak sadrži kolekciju cijelih brojeva bez određenog redoslijeda. Zatim pozivamo funkciju sort.IntsAreSorted() i prosljeđujemo odsječak 'sl' kao argument. Ova funkcija daje Booleov rezultat koji pokazuje je li unos presjeka raspoređen uzlaznim redoslijedom. Zatim funkcija fmt.Println() ispisuje rezultate koji izlaze je li dani isječak sortiran ili ne na temelju vraćene Booleove vrijednosti.

Izlaz prikazuje false za redoslijed sortiranja odsječka cijelih brojeva budući da nije sortiran:

Primjer 6: Odsječak Golang obrnutog sortiranja

Nadalje, korištenjem funkcija sortReverse() i sortStringSlice() iz paketa sortiranja u Gou, možemo obrnuto sortirati dio nizova. Sljedeći program demonstrira rad funkcije sort.Reverse():

paket glavni
uvoz (
'fmt'
'vrsta'
)
funk glavni () {
samoglasnik Slice := [] niz { 'To je' , 'a' , 'ja' , 'u' , 'O' }
fmt . Println ( 'Prije sortiranja:' , samoglasnik Slice )
vrsta . Vrsta ( vrsta . Obrnuto ( vrsta . StringSlice ( samoglasnik Slice )))
fmt . Println ( 'Nakon  razvrstavanja:' , samoglasnik Slice )
}

Počinjemo definiranjem isječka niza 'vowelSlice' koji sadrži samoglasnike 'e', 'a', 'i', 'u' i 'o'. Prvo se ispisuje početni sadržaj navedenog odsječka nizova pomoću funkcije 'ispis'. Zatim se operacija sortiranja izvodi pomoću funkcije sort.Sort() s funkcijama sort.Reverse() i sort.StringSlice() kao argumentima. Ovdje 'sort.Reverse()' stvara novi tip koji obrće redoslijed elemenata. Uzima tip 'sort.StringSlice' kao argument koji pretvara vowelSlice u tip koji se može sortirati.

Izlaz ovdje prikazuje samoglasnike obrnutim abecednim redom:

Zaključak

Udubili smo se u razne funkcije sortiranja s primjerima koji sortiraju dani isječak. Također smo govorili o razvrstavanju pododsječaka i provjeri je li odsječak već sortiran. Stoga možemo iskoristiti mogućnosti paketa sortiranja za rješavanje širokog spektra izazova sortiranja u njihovim Go projektima.