Golango rūšiavimo gabalų pavyzdžiai

Golango Rusiavimo Gabalu Pavyzdziai



Rūšiavimas yra pagrindinė programavimo operacija, apimanti elementų išdėstymą tam tikra tvarka. Rūšiavimo pakete, kuriame yra oficiali Go biblioteka, yra keletas funkcijų, leidžiančių greitai rūšiuoti skilteles. Pjūvių rūšiavimas yra įprasta užduotis daugelyje programų, pradedant duomenų tvarkymu pateikimui ir baigiant paieškos algoritmų optimizavimu. Šiame straipsnyje nagrinėjami įvairūs rūšiavimo būdai ir parodomas jų naudojimas programoje Go naudojant rūšiavimo paketą.

1 pavyzdys: Golango rūšiavimo skiltis didėjančia tvarka

Funkcija „sort.Slice()“ yra pagrindinė „Go“ funkcija, kuri pertvarko skilties elementus didėjančia arba mažėjančia tvarka. Atsižvelkite į toliau pateiktą iliustraciją, kurioje pjūvis išdėstytas didėjančia tvarka:

paketą pagrindinis
importuoti (
'fmt'
'rūšiuoti'
)
func pagrindinis () {
net Slice := [] tarpt { 10 , 2 , 8 , 4 , 0 , 6 }
fmt . Println ( 'Nerūšiuotas gabalas:' , net Slice )
rūšiuoti . Supjaustykite ( net Slice , func ( i , j tarpt ) bool {
grąžinti net Slice [ i ] < tolygus Pjūvis [ j ]
})
fmt . Println ( 'Rūšiuotas gabalas:' , net Slice )
}

Funkcijos main() pradžioje apibrėžiame EvenSlice pjūvį su {10, 2, 8, 4, 0, 6} reikšmėmis. Ši dalis rodo lyginių skaičių, kurie iš pradžių nėra surūšiuoti, rinkinį. Norint surūšiuoti skiltį EvenSlice, kartu su pjūviu naudojama funkcija sort.Slice(). Funkcijoje sort.Slice() kaip argumentas pateikiama rūšiavimo funkcija. Ši funkcija nustato rūšiavimo tvarką, lygindama du pjūvio elementus, esančius „i“ ir „j“ indeksuose. Jei evenSlice[i] yra mažesnis už netSlice[j], jis grąžina true; kitu atveju grąžinama klaidinga. Funkcija sort.Slice() naudoja šią palyginimo funkciją, kad pertvarkytų 'evenSlice' pjūvio elementus didėjančia tvarka.







Surūšiuoto pjūvio rezultatai didėjančia tvarka generuojami šiame išvesties ekrane:





2 pavyzdys: Golango rūšiavimo dalies pjūvis

Tada rūšiavimas taikomas nurodytos pjūvio daliai didėjančia tvarka naudojant funkciją sort.Slice() programoje Go.





paketą pagrindinis
importuoti (
'fmt'
'rūšiuoti'
)
func pagrindinis () {
n := [] tarpt { 9 , 7 , 3 , 5 }
pradėti := 0
galas := 3
rūšiuoti . Supjaustykite ( n [ pradėti : galas ], func ( i , j tarpt ) bool {
grąžinti n [ pradėti + i ] < n [ pradėti + j ]
})
fmt . Println ( n )
}

Iš pradžių sukuriame „n“ pjūvį su [9, 7, 3, 5] reikšmėmis. Be to, du kintamieji „pradžia“ ir „pabaiga“ yra atitinkamai nustatyti į 0 ir 3. Šie kintamieji apibrėžia indeksų diapazoną „n“ skiltyje, kuri bus rūšiuojama. Tada funkcija 'sort.Slice()' iškviečiama su subslice 'n[start:end]' kaip pirmuoju argumentu. Šiame poskyryje yra „n“ elementai nurodytame diapazone. Po to rūšiavimo funkcija pateikiama kaip antrasis argumentas funkcijos sort.Slice() viduje.

Čia ta funkcija gauna du indeksus „i“ ir „j“, kurie žymi poskyrio elementus. Norėdami palyginti elementus poskyryje, rūšiavimo funkcija pasiekia atitinkamus pradinio pjūvio elementus, naudodama pradžią. poslinkis. Jis lygina n[start+i] ir n[start+j]. Tada funkcija sort.Slice() naudoja pateiktą rūšiavimo funkciją, kad pertvarkytų poskyrio elementus didėjančia tvarka.



Toliau pateikiamame išvestyje rodoma, kad elementai, esantys nurodytame diapazone (nuo pradžios iki pabaigos-1), yra surūšiuoti, o už diapazono ribų esantys elementai lieka nepakitę:

3 pavyzdys: Golango rūšiavimas sveikųjų skaičių pjūvį naudojant Sort.Ints() funkciją

Be to, patogiausia rūšiuoti sveikųjų skaičių pjūvius yra funkcija sort.Ints() netaikant pasirinktinių rūšiavimo metodų. Jis tiesiogiai veikia sveikųjų skaičių pjūvius ir atlieka rūšiavimą vietoje. Ši programa surūšiuoja nurodytus sveikuosius skaičius:

paketą pagrindinis
importuoti (
'fmt'
'rūšiuoti'
)
func pagrindinis () {
IntSlice := [] tarpt { 10 , 13 , penkiolika , vienuolika , 14 , 12 }
fmt . Println ( 'Nerūšiuotas gabalas:' , IntSlice )
rūšiuoti . Tarpt ( IntSlice )
fmt . Println ( 'Rūšiuotas gabalas:' , IntSlice )
}

Pirmiausia deklaruojame ir inicijuojame „IntSlice“ pjūvį su [10, 13, 15, 11, 14, 12] reikšmėmis, kurios atspindi sveikųjų skaičių, kurie iš pradžių nebuvo surūšiuoti, rinkinį. Tada funkcija sort.Ints() iškviečiama su 'IntSlice' pjūviu kaip argumentu 'IntSlice' rūšiuoti. Funkcija sort.Ints() šiuo atveju viduje rūšiuoja kiekvieną pjūvio dalį pagal optimizuotą rūšiavimo algoritmą. Jis tiesiogiai modifikuoja pradinį pjūvį, pertvarkydamas jo elementus į surūšiuotą tvarką.

Ši išvestis pirmiausia rodo, kad pirmiausia rodoma nerūšiuota dalis, o po to – surūšiuota dalis:

4 pavyzdys: Golango rūšiavimo eilutės pjūvis

Go taip pat siūlo rūšiavimo paketo funkciją sort.Strings(), kuri naudojama rūšiuoti eilučių dalį tam tikra tvarka. Čia ši programa padeda rūšiuoti eilutes:

paketą pagrindinis
importuoti (
'fmt'
'rūšiuoti'
)
func pagrindinis () {
strSl := [] styga { 'golanas' , 'python' , 'java' , 'perl' , 'mašinraštis' }
rūšiuoti . Stygos ( strSl )
fmt . Println ( strSl )
}

Pirmiausia sukūrėme „strSl“ pjūvį su [„golang“, „python“, „java“, „perl“, „typescript“] reikšmėmis, kurios nėra rūšiuojamos. Po to „strSl“ pjūvį surūšiuojame naudodami funkciją sort.Strings(), kuri surūšiuoja pjūvio elementus leksikografine tvarka. Ši funkcija tiesiogiai modifikuoja pradinį pjūvį, pertvarkydama jo elementus į surūšiuotą tvarką pagal jų ASCII reikšmes.

Išvestis rūšiuoja eilutės pjūvį didėjančia tvarka, kaip parodyta taip:

5 pavyzdys: Golango patikrinimo rūšiavimo pjūvis naudojant IntAreSort() funkciją

Tačiau naudodami Go funkciją sort.IntsAreSorted() galime patikrinti, ar tam tikra sveikųjų skaičių dalis yra surūšiuota didėjančia tvarka, ar ne. Apsvarstykite toliau pateiktą IntAreSort() funkcijos programos pavyzdį, skirtą duotam pjūviui:

paketą pagrindinis
importuoti (
'fmt'
'rūšiuoti'
)
func pagrindinis () {
sl := [] tarpt { - 33 , 105 , - 42 , 59 , 18 , 0 , - 3 }
fmt . Println ( 'Skilteliai:' )
fmt . Println ( „Nerūšiuotas gabalas:“ , sl )
rezultatas := rūšiuoti . IntsAreSorted ( sl )
fmt . Println ( \n Rezultatas:' )
fmt . Println ( „Ar duotas gabalas surūšiuotas?:“ , rezultatas )
}

Pirma, nesurūšiuota atsitiktinių sveikųjų skaičių dalis apibrėžiama kaip „sl“. Šioje skiltyje yra sveikųjų skaičių rinkinys jokia tvarka. Tada iškviečiame funkciją sort.IntsAreSorted() ir kaip argumentą perduodame skiltį „sl“. Ši funkcija pateikia Būlio rezultatą, nurodantį, ar pjūvio įvestis yra išdėstyta didėjančia tvarka, ar ne. Tada funkcija fmt.Println() išspausdina rezultatus, kurie išveda, ar nurodyta dalis surūšiuota, ar ne pagal grąžintą Būlio reikšmę.

Išvestis rodoma klaidinga sveikųjų skaičių rūšiavimo tvarka, nes ji nerūšiuojama:

6 pavyzdys: Golango atvirkštinio rūšiavimo skiltis

Be to, naudodami „Go“ rūšiavimo paketo funkcijas sortReverse() ir sortStringSlice() galime rūšiuoti eilučių dalį atvirkštine tvarka. Ši programa demonstruoja funkcijos sort.Reverse() veikimą:

paketą pagrindinis
importuoti (
'fmt'
'rūšiuoti'
)
func pagrindinis () {
balsisSlice := [] styga { 'Tai yra' , 'a' , 'aš' , 'į' , 'O' }
fmt . Println ( 'Prieš rūšiavimą:' , balsisSlice )
rūšiuoti . Rūšiuoti ( rūšiuoti . Atvirkščiai ( rūšiuoti . StringSlice ( balsisSlice )))
fmt . Println ( „Po rūšiavimo:“ , balsisSlice )
}

Pradedame apibrėždami eilutę „vowelSlice“, kurioje yra balsės „e“, „a“, „i“, „u“ ir „o“. Pradinis nurodytos eilučių dalies turinys išspausdinamas pirmiausia naudojant „spausdinimo“ funkciją. Toliau rūšiavimo operacija atliekama naudojant funkciją sort.Sort() su funkcijomis sort.Reverse() ir sort.StringSlice() kaip argumentus. Čia „sort.Reverse()“ sukuria naują tipą, kuris pakeičia elementų tvarką. Kaip argumentą naudojamas tipas „sort.StringSlice“, kuris paverčia balsįSlice į rūšiuojamą tipą.

Išvestyje balsės rodomos atvirkštine abėcėlės tvarka:

Išvada

Gilinomės į įvairias rūšiavimo funkcijas su pavyzdžiais, kurie rūšiuoja pateiktą gabalą. Taip pat aptarėme dalių rūšiavimą ir patikrinimą, ar gabalas jau surūšiuotas. Taigi, mes galime panaudoti rūšiavimo paketo galimybes, kad galėtume išspręsti įvairius rūšiavimo iššūkius jų „Go“ projektuose.