sort.Ints în Go

Sortează crescător, pe loc, un []int, []string sau []float64; IntsAreSorted verifică dacă un []int este deja sortat.

Sintaxă
import "sort"

func Ints(x []int)
func Strings(x []string)
func Float64s(x []float64)
func IntsAreSorted(x []int) bool

Ce face sort.Ints

sort.Ints, sort.Strings și sort.Float64s sortează crescător slice-ul primit, pe loc: nu returnează nimic, ci modifică slice-ul. Textele sunt sortate după octeți (UTF-8), deci literele mari vin înaintea celor mici, iar literele cu diacritice după z.

sort.IntsAreSorted(x) returnează true dacă elementele sunt deja în ordine crescătoare.

Sunt funcțiile vechi, din Go 1.0. Din Go 1.22 ele apelează pur și simplu slices.Sort. În cod nou folosește direct slices.Sort(x) și slices.IsSorted(x), care merg pentru orice tip ordonat (int64, uint8, tipuri proprii peste string etc.).

Parametri

Parametru Descriere
x Slice-ul de sortat sau de verificat.

Ce returnează

Funcțiile de sortare nu returnează nimic. IntsAreSorted returnează un bool.

Exemple

Exemplul 1: Sortarea notelor și a orașelor

package main

import (
    "fmt"
    "sort"
)

func main() {
    note := []int{7, 10, 5, 9, 8}
    fmt.Println(sort.IntsAreSorted(note))
    sort.Ints(note)
    fmt.Println(note, sort.IntsAreSorted(note))

    orase := []string{"Iași", "Cluj", "Arad", "Brașov"}
    sort.Strings(orase)
    fmt.Println(orase)

    preturi := []float64{12.5, 3.99, 7.25}
    sort.Float64s(preturi)
    fmt.Println(preturi)
}

Rezultat

false
[5 7 8 9 10] true
[Arad Brașov Cluj Iași]
[3.99 7.25 12.5]

Exemplul 2: Varianta modernă cu slices.Sort

Același rezultat cu slices. Observă ordinea după octeți: Zalău (Z mare) vine înaintea lui arad (a mic), iar Ștei la final.

package main

import (
    "fmt"
    "slices"
)

func main() {
    note := []int{7, 10, 5, 9, 8}
    slices.Sort(note)
    fmt.Println(note, slices.IsSorted(note))

    orase := []string{"arad", "Zalău", "Ștei", "Iași"}
    slices.Sort(orase)
    fmt.Println(orase)
}

Rezultat

[5 7 8 9 10] true
[Iași Zalău arad Ștei]

Greșeli frecvente

  • Scrii note = sort.Ints(note): funcția nu returnează nimic, deci nu compilează. Apelează doar sort.Ints(note).
  • Aștepți ordine alfabetică românească: sortarea compară octeții, deci Ș ajunge după Z. Pentru ordinea corectă din limbă ai nevoie de golang.org/x/text/collate.

Comenzi înrudite

  • slices.Sort: Sortează crescător, pe loc, un slice de orice tip ordonat (numere, texte).
  • sort.Slice: Sortează un slice de orice tip după o funcție less(i, j); SliceStable păstrează ordinea elementelor egale.
  • sort.Search: Căutare binară: Search găsește cel mai mic indice i din [0, n) pentru care f(i) este true; SearchInts caută un int într-un slice sortat.
  • slices.IsSorted: Verifică dacă un slice este sortat crescător; IsSortedFunc folosește o funcție de comparare proprie.