Príklady triedenia Golang

Priklady Triedenia Golang



Triedenie je základná programovacia operácia, ktorá zahŕňa usporiadanie prvkov v určitom poradí. Balík triedenia, ktorý sprístupňuje oficiálna knižnica Go, obsahuje niekoľko funkcií na rýchle triedenie rezov. Triedenie rezov je bežnou úlohou v mnohých aplikáciách, od organizácie údajov na prezentáciu až po optimalizáciu vyhľadávacích algoritmov. Tento článok skúma rôzne techniky triedenia a demonštruje ich použitie v Go pomocou triediaceho balíka.

Príklad 1: Golang Tried Slice vo vzostupnom poradí

Funkcia „sort.Slice()“ je prvou funkciou v Go, ktorá mení usporiadanie prvkov rezu vo vzostupnom alebo zostupnom poradí. Berte do úvahy nasledujúci obrázok, kde je rez usporiadaný vo vzostupnom poradí:

balík Hlavná
importovať (
'fmt'
'triediť'
)
func Hlavná () {
rovnomerný plátok := [] int { 10 , 2 , 8 , 4 , 0 , 6 }
fmt . Println ( 'Netriedený plátok:' , rovnomerný plátok )
triediť . Plátok ( rovnomerný plátok , func ( i , j int ) bool {
vrátiť rovnomerný plátok [ i ] < párny plátok [ j ]
})
fmt . Println ( 'Triedený plátok:' , rovnomerný plátok )
}

Na začiatku funkcie main() definujeme segment EvenSlice s hodnotami {10, 2, 8, 4, 0, 6}. Tento segment predstavuje kolekciu párnych čísel, ktoré sú na začiatku nezoradené. Na zoradenie časti EvenSlice sa s rezom použije funkcia sort.Slice(). Vo vnútri funkcie sort.Slice() je ako argument poskytnutá funkcia triedenia. Táto funkcia určuje poradie triedenia porovnaním dvoch prvkov rezu pri indexoch „i“ a „j“. Ak je EvenSlice[i] menší ako EvenSlice[j], vráti hodnotu true; v opačnom prípade vráti hodnotu false. Funkcia sort.Slice() používa túto porovnávaciu funkciu na preusporiadanie prvkov rezu „evenSlice“ vo vzostupnom poradí.







Výsledky zoradeného rezu vo vzostupnom poradí sa generujú na nasledujúcej výstupnej obrazovke:





Príklad 2: Golang Sort Part Slice

Ďalej sa triedenie aplikuje na čiastkový rez zadaného rezu vo vzostupnom poradí pomocou funkcie sort.Slice() v Go.





balík Hlavná
importovať (
'fmt'
'triediť'
)
func Hlavná () {
n := [] int { 9 , 7 , 3 , 5 }
začať := 0
koniec := 3
triediť . Plátok ( n [ začať : koniec ], func ( i , j int ) bool {
vrátiť n [ začať + i ] < n [ začať + j ]
})
fmt . Println ( n )
}

Najprv vytvoríme rez „n“ s hodnotami [9, 7, 3, 5]. Okrem toho sú dve premenné, „začiatok“ a „koniec“, nastavené na 0 a 3. Tieto premenné definujú rozsah indexov v „n“ reze, ktoré budú zoradené. Potom sa zavolá funkcia „sort.Slice()“ s podrezom „n[začiatok:koniec]“ ako prvým argumentom. Tento čiastkový segment obsahuje prvky „n“ v rámci špecifikovaného rozsahu. Potom je funkcia triedenia uvedená ako druhý argument vo funkcii sort.Slice().

Tu táto funkcia prijíma dva indexy, „i“ a „j“, ktoré predstavujú prvky v rámci čiastkového rezu. Na porovnanie prvkov v rámci čiastkového rezu funkcia triedenia pristupuje k zodpovedajúcim prvkom v pôvodnom reze pomocou začiatku offset. Porovnáva n[start+i] a n[start+j]. Ďalej funkcia sort.Slice() používa poskytnutú funkciu triedenia na preusporiadanie prvkov v rámci čiastkového rezu vo vzostupnom poradí.



Nasledujúci výstup zobrazuje, že prvky v zadanom rozsahu (začiatok až koniec-1) sú zoradené a prvky mimo rozsahu zostanú nezmenené:

Príklad 3: Golang Sort Integer Slice pomocou funkcie Sort.Ints().

Navyše, najpohodlnejšie na triedenie častí celých čísel je funkcia sort.Ints() bez potreby implementácie vlastných metód triedenia. Pôsobí priamo na celočíselné rezy a vykonáva triedenie na mieste. Nasledujúci program triedi zadané celé čísla:

balík Hlavná
importovať (
'fmt'
'triediť'
)
func Hlavná () {
IntSlice := [] int { 10 , 13 , pätnásť , jedenásť , 14 , 12 }
fmt . Println ( 'Netriedený plátok:' , IntSlice )
triediť . Ints ( IntSlice )
fmt . Println ( 'Triedený plátok:' , IntSlice )
}

Najprv deklarujeme a inicializujeme segment „IntSlice“ s hodnotami [10, 13, 15, 11, 14, 12], ktoré predstavujú kolekciu celých čísel, ktoré nie sú na začiatku zoradené. Potom sa zavolá funkcia sort.Ints() s rezom „IntSlice“ ako argumentom na zoradenie „IntSlice“. Funkcia sort.Ints() v tomto prípade interne triedi každú časť rezu podľa optimalizovaného triediaceho algoritmu. Priamo upraví pôvodný rez a preusporiada jeho prvky do zoradeného poradia.

Nasledujúci výstup najprv ukazuje, že ako prvý sa zobrazí nezoradený výsek a potom zoradený výsek:

Príklad 4: Golang Sort String Slice

Go tiež ponúka funkciu sort.Strings() triediaceho balíka, ktorá sa používa na triedenie rezov reťazcov v špecifickom poradí. Tu nasledujúci program pomáha triediť rez reťazcov:

balík Hlavná
importovať (
'fmt'
'triediť'
)
func Hlavná () {
strSl := [] reťazec { 'golan' , 'python' , 'java' , 'perl' , 'strojopis' }
triediť . Struny ( strSl )
fmt . Println ( strSl )
}

Najprv sme vytvorili segment „strSl“ s hodnotami [„golang“, „python“, „java“, „perl“, „typescript“], ktoré nie sú zoradené. Potom triedime rez „strSl“ pomocou funkcie sort.Strings(), ktorá triedi prvky rezu v lexikografickom poradí. Táto funkcia priamo upraví pôvodný rez a preusporiada jeho prvky do zoradeného poradia na základe ich hodnôt ASCII.

Výstup triedi reťazec vzostupne, ako je zobrazené v nasledujúcom texte:

Príklad 5: Golang Check Sort Slice pomocou funkcie IntAreSort().

Pomocou funkcie sort.IntsAreSorted() funkcie Go však môžeme skontrolovať, či je daný úsek celých čísel zoradený vzostupne alebo nie. Uvažujme o nasledujúcom príklade programu funkcie IntAreSort() pre daný rez:

balík Hlavná
importovať (
'fmt'
'triediť'
)
func Hlavná () {
sl := [] int { - 33 , 105 , - 42 , 59 , 18 , 0 , - 3 }
fmt . Println ( 'Plátky:' )
fmt . Println ( 'Netriedený plátok: ' , sl )
výsledok := triediť . IntsAreSorted ( sl )
fmt . Println ( ' \n Výsledok:' )
fmt . Println ( 'Je daný Slice zoradený?: ' , výsledok )
}

Po prvé, nezoradený výsek náhodných celých čísel je definovaný ako „sl“. Tento segment obsahuje kolekciu celých čísel bez konkrétneho poradia. Ďalej zavoláme funkciu sort.IntsAreSorted() a odovzdáme časť „sl“ ako argument. Táto funkcia poskytuje booleovský výsledok, ktorý indikuje, či je alebo nie je vstup rezu usporiadaný vo vzostupnom poradí. Potom funkcia fmt.Println() vytlačí výsledky, ktoré vypíšu, či je daný výrez zoradený alebo nie na základe vrátenej booleovskej hodnoty.

Výstup zobrazuje false pre poradie zoradenia časti celých čísel, pretože nie je zoradené:

Príklad 6: Reverzné triedenie Golang

Ďalej pomocou funkcií sortReverse() a sortStringSlice() z balíka triedenia v Go môžeme spätne zoradiť časť reťazcov. Nasledujúci program demonštruje fungovanie funkcie sort.Reverse():

balík Hlavná
importovať (
'fmt'
'triediť'
)
func Hlavná () {
samohláskaSlice := [] reťazec { 'To je' , 'a' , 'ja' , 'v' , 'O' }
fmt . Println ( 'Pred triedením:' , samohláskaSlice )
triediť . Triediť ( triediť . Obrátené ( triediť . StringSlice ( samohláskaSlice )))
fmt . Println ( 'Po zoradení:' , samohláskaSlice )
}

Začneme definovaním časti reťazca „vowelSlice“, ktorá obsahuje samohlásky „e“, „a“, „i“, „u“ a „o“. Pomocou funkcie „print“ sa najskôr vytlačí počiatočný obsah zadaného úseku reťazcov. Ďalej sa vykoná operácia triedenia pomocou funkcie sort.Sort() s funkciami sort.Reverse() a sort.StringSlice() ako argumentmi. Tu „sort.Reverse()“ vytvorí nový typ, ktorý obráti poradie prvkov. Ako argument používa typ „sort.StringSlice“, ktorý konvertuje samohlásku na typ, ktorý je možné triediť.

Výstup tu zobrazuje samohlásky v obrátenom abecednom poradí:

Záver

Ponorili sme sa do rôznych triediacich funkcií s príkladmi, ktoré triedia poskytnutý výsek. Tiež sme sa zaoberali triedením podrezkov a kontrolou, či je už rez vytriedený. Preto môžeme využiť možnosti triediaceho balíka na riešenie širokej škály problémov s triedením v ich projektoch Go.