Esimerkkejä Golangin lajitteluviipaleista

Esimerkkeja Golangin Lajitteluviipaleista



Lajittelu on perusohjelmointitoiminto, joka sisältää elementtien asettamisen tiettyyn järjestykseen. Lajittelupaketti, jonka Go:n virallinen kirjasto tarjoaa, sisältää useita toimintoja siivujen nopeaan lajitteluun. Viipaleiden lajittelu on yleinen tehtävä monissa sovelluksissa tietojen järjestämisestä esitystä varten hakualgoritmien optimointiin. Tämä artikkeli tutkii erilaisia ​​lajittelutekniikoita ja esittelee niiden käytön Go-sovelluksessa lajittelupaketin avulla.

Esimerkki 1: Golang Lajittele siivu nousevassa järjestyksessä

Funktio 'sort.Slice()' on Go:n tärkein toiminto, joka järjestää viipaleen elementit uudelleen nousevaan tai laskevaan järjestykseen. Ota huomioon seuraava kuva, jossa siivu on järjestetty nousevaan järjestykseen:

paketti pää
tuonti (
'fmt'
'järjestellä'
)
func pää () {
jopa Slice := [] int { 10 , 2 , 8 , 4 , 0 , 6 }
fmt . Println ( 'Lajittelematon viipale:' , jopa Slice )
järjestellä . Viipale ( jopa Slice , func ( i , j int ) bool {
palata jopa Slice [ i ] < tasaviipale [ j ]
})
fmt . Println ( 'Lajiteltu siivu:' , jopa Slice )
}

Main()-funktion alussa määrittelemme EvenSlice-viipaleen arvoilla {10, 2, 8, 4, 0, 6}. Tämä osio edustaa kokoelmaa parillisia lukuja, jotka ovat alun perin lajittelemattomia. EvenSlice-viipaleen lajittelemiseksi käytetään lajit.Slice()-funktiota. Sort.Slice()-funktion sisällä on lajittelufunktio argumenttina. Tämä toiminto määrittää lajittelujärjestyksen vertaamalla viipaleen kahta elementtiä indekseissä 'i' ja 'j'. Jos parillinen[i] on pienempi kuin parillinen[j], se palauttaa tosi; muussa tapauksessa se palauttaa epätosi. Sort.Slice()-funktio käyttää tätä vertailufunktiota 'evenSlice'-osion elementtien järjestämiseen nousevaan järjestykseen.







Nousevassa järjestyksessä lajiteltujen osien tulokset luodaan seuraavassa tulosnäytössä:





Esimerkki 2: Golang Sort Part Slice

Seuraavaksi lajittelua sovelletaan määritetyn siivun aliviipaleeseen nousevassa järjestyksessä Go:n sort.Slice()-funktiolla.





paketti pää
tuonti (
'fmt'
'järjestellä'
)
func pää () {
n := [] int { 9 , 7 , 3 , 5 }
alkaa := 0
loppu := 3
järjestellä . Viipale ( n [ alkaa : loppu ], func ( i , j int ) bool {
palata n [ alkaa + i ] < n [ alkaa + j ]
})
fmt . Println ( n )
}

Aluksi luomme 'n'-viipaleen [9, 7, 3, 5] arvoilla. Lisäksi kaksi muuttujaa, 'alku' ja 'loppu', on asetettu arvoihin 0 ja 3. Nämä muuttujat määrittävät lajiteltavan n-lohkon indeksien alueen. Sitten kutsutaan 'sort.Slice()' -funktiota aliviipaleella 'n[aloitus:loppu]' ensimmäisenä argumenttina. Tämä osalohko sisältää 'n':n elementit määritetyllä alueella. Tämän jälkeen lajittelufunktio annetaan toisena argumenttina sort.Slice()-funktion sisällä.

Tässä funktio vastaanottaa kaksi indeksiä, 'i' ja 'j', jotka edustavat aliviipaleen elementtejä. Aliviipaleen elementtien vertailua varten lajittelutoiminto hakee alkuperäisen viipaleen vastaavia elementtejä käyttämällä aloitusta. Se vertaa n[aloitus+i] ja n[aloitus+j]. Seuraavaksi sort.Slice()-funktio käyttää toimitettua lajittelufunktiota aliviipaleen elementtien järjestämiseen nousevaan järjestykseen.



Seuraava tulos näyttää, että määritetyn alueen elementit (alusta loppuun-1) lajitellaan ja alueen ulkopuolella olevat elementit pysyvät ennallaan:

Esimerkki 3: Golang Lajittele Integer Slice käyttämällä Sort.Ints()-funktiota

Lisäksi kätevin kokonaislukuviipaleiden lajittelu on sort.Ints()-funktio ilman mukautettuja lajittelumenetelmiä. Se vaikuttaa suoraan kokonaislukuviipaleisiin ja suorittaa paikan päällä tapahtuvan lajittelun. Seuraava ohjelma lajittelee määritetyt kokonaisluvut:

paketti pää
tuonti (
'fmt'
'järjestellä'
)
func pää () {
IntSlice := [] int { 10 , 13 , viisitoista , yksitoista , 14 , 12 }
fmt . Println ( 'Lajittelematon viipale:' , IntSlice )
järjestellä . Ints ( IntSlice )
fmt . Println ( 'Lajiteltu siivu:' , IntSlice )
}

Ensin ilmoitamme ja alustamme 'IntSlice'-osion [10, 13, 15, 11, 14, 12] arvoilla, jotka edustavat kokoelmaa kokonaislukuja, jotka ovat alun perin lajittelemattomia. Sitten laji.Ints()-funktiota kutsutaan 'IntSlice'-lohkolla argumenttina 'IntSlice'-osan lajittelemiseksi. Sort.Ints()-funktio lajittelee tässä tapauksessa sisäisesti viipaleen jokaisen osan optimoidun lajittelualgoritmin mukaan. Se muokkaa alkuperäistä siivua suoraan järjestämällä sen elementit lajiteltuun järjestykseen.

Seuraava tulos näyttää ensin, että lajittelematon viipale näytetään ensin ja sen jälkeen lajiteltu viipale:

Esimerkki 4: Golangin lajittelumerkkijono

Go tarjoaa myös lajittelupaketin sort.Strings()-funktion, jota käytetään lajittelemaan merkkijonojen viipale tiettyyn järjestykseen. Tässä seuraava ohjelma auttaa lajittelemaan merkkijonoviipaleen:

paketti pää
tuonti (
'fmt'
'järjestellä'
)
func pää () {
strSl := [] merkkijono { 'golan' , 'python' , 'java' , 'perl' , 'konekirjoitus' }
järjestellä . jouset ( strSl )
fmt . Println ( strSl )
}

Perustimme ensin 'strSl'-lohkon ['golang', 'python', 'java', 'perl', 'typescript']-arvoilla, joita ei ole lajiteltu. Sen jälkeen lajitellaan 'strSl'-lohko lajittelemalla.Strings()-funktiolla, joka lajittelee viipaleen elementit leksikografiseen järjestykseen. Tämä toiminto muokkaa alkuperäistä viipaletta suoraan ja järjestää sen elementit uudelleen lajiteltuun järjestykseen niiden ASCII-arvojen perusteella.

Tulos lajittelee merkkijonoviipaleen nousevalla tavalla, kuten seuraavassa esitetään:

Esimerkki 5: Golang Check Sort Slice IntAreSort()-funktiolla

Go:n sort.IntsAreSorted()-funktiolla voimme kuitenkin tarkistaa, onko tietty kokonaislukulohko lajiteltu nousevaan järjestykseen vai ei. Tarkastellaan seuraavaa IntAreSort()-funktion esimerkkiohjelmaa annetulle viipaleelle:

paketti pää
tuonti (
'fmt'
'järjestellä'
)
func pää () {
sl := [] int { - 33 , 105 , - 42 , 59 , 18 , 0 , - 3 }
fmt . Println ( 'Siivut:' )
fmt . Println ( 'Lajittelematon siivu:' , sl )
tulos := järjestellä . IntsAreSorted ( sl )
fmt . Println ( ' \n Tulos:' )
fmt . Println ( 'Onko annettu Slice lajiteltu?:' , tulos )
}

Ensinnäkin satunnaisten kokonaislukujen lajittelematon osa määritellään nimellä 'sl'. Tämä osio sisältää joukon kokonaislukuja ei missään tietyssä järjestyksessä. Seuraavaksi kutsumme sort.IntsAreSorted()-funktiota ja välitämme 'sl'-osion argumenttina. Tämä funktio tarjoaa Boolen tuloksen, joka osoittaa, onko viipaleen syöte järjestetty nousevaan järjestykseen. Sitten fmt.Println()-funktio tulostaa tulokset, jotka tulostavat, onko annettu viipale lajiteltu vai ei palautetun Boolen arvon perusteella.

Tulos näyttää epätosi kokonaislukujen lohkon lajittelujärjestyksessä, koska se on lajittelematon:

Esimerkki 6: Golangin käänteinen lajitteluviipale

Lisäksi käyttämällä sortReverse()- ja sortStringSlice()-funktioita lajittelupaketista Goissa, voimme lajitella merkkijonojen osia käänteisesti. Seuraava ohjelma näyttää sort.Reverse()-funktion toiminnan:

paketti pää
tuonti (
'fmt'
'järjestellä'
)
func pää () {
vokaaliSlice := [] merkkijono { 'Se on' , 'a' , 'minä' , 'sisään' , 'O' }
fmt . Println ( 'Ennen lajittelua:' , vokaaliSlice )
järjestellä . Järjestellä ( järjestellä . Käänteinen ( järjestellä . StringSlice ( vokaaliSlice )))
fmt . Println ( 'Lajittelun jälkeen:' , vokaaliSlice )
}

Aloitamme määrittelemällä osan 'vowelSlice'-merkkijonosta, joka sisältää vokaalit 'e', 'a', 'i', 'u' ja 'o'. Määritetyn merkkijonolohkon alkuperäinen sisältö tulostetaan ensin 'print'-toiminnolla. Seuraavaksi lajittelu suoritetaan käyttämällä funktiota sort.Sort() ja argumentteina funktiot sort.Reverse() ja sort.StringSlice(). Tässä 'sort.Reverse()' luo uuden tyypin, joka kääntää elementtien järjestyksen. Se käyttää 'sort.StringSlice'-tyyppiä argumenttina, joka muuntaa vowelSlice-lajin lajiteltavaksi tyypiksi.

Tässä tuloste näyttää vokaalit käänteisessä aakkosjärjestyksessä:

Johtopäätös

Tutustuimme erilaisiin lajittelutoimintoihin esimerkkien avulla, jotka lajittelevat tarjotun siivun. Käsittelimme myös alaviipaleiden lajittelua ja sen tarkistamista, onko viipale jo lajiteltu. Näin ollen voimme hyödyntää lajittelupaketin ominaisuuksia vastataksemme monenlaisiin lajitteluhaasteisiin heidän Go-projekteissaan.