Exemple de felii de sortare Golang

Exemple De Felii De Sortare Golang



Sortarea este o operație de programare fundamentală care include punerea elementelor într-o anumită ordine. Pachetul de sortare, în care biblioteca oficială Go îl pune la dispoziție, include mai multe funcții pentru a sorta rapid feliile. Sortarea secțiunilor este o sarcină comună în multe aplicații, de la organizarea datelor pentru prezentare până la optimizarea algoritmilor de căutare. Acest articol explorează diferitele tehnici de sortare și demonstrează utilizarea lor în Go folosind pachetul de sortare.

Exemplul 1: Golang Sort Slice în ordine crescătoare

Funcția „sort.Slice()” este cea mai importantă funcție din Go care rearanjează elementele feliei în ordine crescătoare sau descrescătoare. Luați în considerare următoarea ilustrație în care felia este aranjată în ordine crescătoare:

pachet principal
import (
'fmt'
'fel'
)
func principal () {
evenSlice := [] int { 10 , 2 , 8 , 4 , 0 , 6 }
fmt . Println ( „Felie nesortată:” , evenSlice )
fel . Felie ( evenSlice , func ( i , j int ) bool {
întoarcere evenSlice [ i ] < evenSlice [ j ]
})
fmt . Println ( „Felie sortată:” , evenSlice )
}

La începutul funcției main(), definim felia evenSlice cu valorile {10, 2, 8, 4, 0, 6}. Această felie reprezintă o colecție de numere pare care sunt inițial nesortate. Pentru a sorta felia evenSlice, funcția sort.Slice() este folosită împreună cu felia. În cadrul funcției sort.Slice(), este furnizată o funcție de sortare ca argument. Această funcție determină ordinea de sortare prin compararea celor două elemente ale feliei la indicii „i” și „j”. Dacă evenSlice[i] este mai mică decât evenSlice[j], returnează adevărat; în caz contrar, se întoarce false. Funcția sort.Slice() folosește această funcție de comparație pentru a rearanja elementele feliei „evenSlice” în ordine crescătoare.







Rezultatele feliei sortate în ordine crescătoare sunt generate în următorul ecran de ieșire:





Exemplul 2: Golang Sort Part Slice

Apoi, sortarea este aplicată sub-slice a feliei specificate în ordine crescătoare folosind funcția sort.Slice() din Go.





pachet principal
import (
'fmt'
'fel'
)
func principal () {
n := [] int { 9 , 7 , 3 , 5 }
start := 0
Sfârşit := 3
fel . Felie ( n [ start : Sfârşit ], func ( i , j int ) bool {
întoarcere n [ start + i ] < n [ start + j ]
})
fmt . Println ( n )
}

Inițial, creăm felia „n” cu valorile [9, 7, 3, 5]. În plus, două variabile, „start” și „end”, sunt setate la 0 și, respectiv, 3. Aceste variabile definesc intervalul de indici din secțiunea „n” care vor fi sortați. Funcția „sort.Slice()” este apoi apelată cu sub-slice „n[start:end]” ca prim argument. Această sub-slice conține elementele lui „n” în intervalul specificat. După aceea, o funcție de sortare este dată ca al doilea argument în interiorul funcției sort.Slice().

Aici, acea funcție primește doi indici, „i” și „j”, care reprezintă elementele din sub-slice. Pentru a compara elementele din sub-slice, funcția de sortare accesează elementele corespunzătoare din slice originală folosind startul offset.Compară n[start+i] și n[start+j] Apoi, funcția sort.Slice() folosește funcția de sortare furnizată pentru a rearanja elementele din sub-slice în ordine crescătoare.



Următoarea ieșire arată că elementele din intervalul specificat (de la început la sfârșit-1) sunt sortate, iar elementele din afara intervalului rămân neschimbate:

Exemplul 3: Golang Sort Integer Slice folosind funcția Sort.Ints().

Mai mult, cea mai convenabilă pentru sortarea feliilor de numere întregi este funcția sort.Ints() fără a fi nevoie de implementarea metodelor de sortare personalizate. Acționează direct asupra feliilor întregi și efectuează o sortare la loc. Următorul program sortează numerele întregi specificate:

pachet principal
import (
'fmt'
'fel'
)
func principal () {
IntSlice := [] int { 10 , 13 , cincisprezece , unsprezece , 14 , 12 }
fmt . Println ( „Felie nesortată:” , IntSlice )
fel . Ints ( IntSlice )
fmt . Println ( „Felie sortată:” , IntSlice )
}

Mai întâi, declarăm și inițializam felia „IntSlice” cu valorile [10, 13, 15, 11, 14, 12] care reprezintă o colecție de numere întregi care sunt inițial nesortate. Apoi, funcția sort.Ints() este apelată cu secțiunea „IntSlice” ca argument pentru a sorta „IntSlice”. Funcția sort.Ints() în acest caz sortează intern fiecare parte a feliei conform unui algoritm de sortare optimizat. Modifică direct felia originală, rearanjandu-și elementele într-o ordine sortată.

Următoarea ieșire arată mai întâi că felia nesortată este afișată mai întâi, urmată de felia sortată:

Exemplul 4: Golang Sort String Slice

Go oferă, de asemenea, funcția sort.Strings() a pachetului de sortare care este folosită pentru a sorta o felie de șiruri într-o anumită ordine. Aici, următorul program ajută la sortarea feliei de șiruri:

pachet principal
import (
'fmt'
'fel'
)
func principal () {
strSl := [] şir { 'golan' , 'piton' , 'java' , 'perl' , 'dactilografiat' }
fel . Siruri de caractere ( strSl )
fmt . Println ( strSl )
}

Am stabilit mai întâi porțiunea „strSl” cu valorile [„golang”, „python”, „java”, „perl”, „typescript”] care nu sunt sortate. După aceea, sortăm felia „strSl” cu funcția sort.Strings() care sortează elementele feliei în ordine lexicografică. Această funcție modifică direct felia originală, rearanjandu-și elementele în ordine sortată pe baza valorilor lor ASCII.

Ieșirea sortează porțiunea șirului în mod ascendent, așa cum este afișat în următorul:

Exemplul 5: Golang Check Sort Slice utilizând funcția IntAreSort().

Cu toate acestea, cu funcția sort.IntsAreSorted() a lui Go, putem verifica dacă o anumită felie de numere întregi este sortată în ordine crescătoare sau nu. Luați în considerare următorul exemplu de program al funcției IntAreSort() pentru felia dată:

pachet principal
import (
'fmt'
'fel'
)
func principal () {
sl := [] int { - 33 , 105 , - 42 , 59 , 18 , 0 , - 3 }
fmt . Println ( „Feii:” )
fmt . Println ( „Felie nesortată:” , sl )
rezultat := fel . IntsAreSorted ( sl )
fmt . Println ( ' \n Rezultat:' )
fmt . Println ( 'Este dat Slice sortat?: ' , rezultat )
}

În primul rând, o porțiune nesortată de numere întregi aleatoare este definită ca „sl”. Această felie conține o colecție de numere întregi fără o anumită ordine. Apoi, apelăm funcția sort.IntsAreSorted() și trecem felia „sl” ca argument. Această funcție oferă un rezultat boolean care indică dacă intrarea secțiunii este sau nu aranjată în ordine crescătoare. Apoi, funcția fmt.Println() tipărește rezultatele care arată dacă felia dată este sortată sau nu pe baza valorii booleene returnate.

Ieșirea afișează false pentru ordinea de sortare a unei secțiuni de numere întregi, deoarece nu este sortată:

Exemplul 6: Golang Reverse Sort Slice

În plus, folosind funcțiile sortReverse() și sortStringSlice() din pachetul de sortare din Go, putem sorta invers o felie de șiruri. Următorul program demonstrează funcționarea funcției sort.Reverse():

pachet principal
import (
'fmt'
'fel'
)
func principal () {
vocalSlice := [] şir { 'Este' , 'A' , 'eu' , 'în' , 'O' }
fmt . Println ( „Înainte de a sorta :” , vocalSlice )
fel . Fel ( fel . Verso ( fel . StringSlice ( vocalSlice )))
fmt . Println ( „După  sortare :” , vocalSlice )
}

Începem prin a defini o felie din șirul „vowelSlice” care conține vocalele „e”, „a”, „i”, „u” și „o”. Conținutul inițial al feliei de șiruri specificate este imprimat mai întâi utilizând funcția „printare”. În continuare, operația de sortare este efectuată folosind funcția sort.Sort() cu funcțiile sort.Reverse() și sort.StringSlice() ca argumente. Aici, „sort.Reverse()” creează un nou tip care inversează ordinea elementelor. Ia ca argument tipul „sort.StringSlice” care convertește vocalSlice într-un tip sortabil.

Rezultatul de aici afișează vocalele în ordine alfabetică inversă:

Concluzie

Am aprofundat în diverse funcții de sortare cu exemple care sortează felia furnizată. Am tratat, de asemenea, despre sortarea sub-slicelor și despre verificarea dacă o felie este deja sortată. Prin urmare, putem valorifica capacitățile pachetului de sortare pentru a aborda o gamă largă de provocări de sortare în proiectele lor Go.