Exemples de tranches de tri Golang

Exemples De Tranches De Tri Golang



Le tri est une opération de programmation fondamentale qui consiste à placer les éléments dans un ordre particulier. Le package de tri, dans lequel la bibliothèque officielle de Go met à disposition, comprend plusieurs fonctions pour trier rapidement les tranches. Le tri des tranches est une tâche courante dans de nombreuses applications, de l'organisation des données pour la présentation à l'optimisation des algorithmes de recherche. Cet article explore les différentes techniques de tri et illustre leur utilisation dans Go à l'aide du package de tri.

Exemple 1 : Golang Sort Slice dans l'ordre croissant

La fonction 'sort.Slice()' est la principale fonction de Go qui réorganise les éléments de la tranche dans l'ordre croissant ou décroissant. Tenez compte de l'illustration suivante où la tranche est disposée par ordre croissant :

emballer principal
importer (
'fmt'
'trier'
)
fonction principal () {
evenSlice := [] entier { dix , 2 , 8 , 4 , 0 , 6 }
fmt . Imprimerln ( 'Tranche non triée :' , evenSlice )
trier . Tranche ( evenSlice , fonction ( je , j entier ) bourdonner {
retour evenSlice [ je ] < evenSlice [ j ]
})
fmt . Imprimerln ( 'Tranche triée :' , evenSlice )
}

Au début de la fonction main(), nous définissons la tranche evenSlice avec les valeurs {10, 2, 8, 4, 0, 6}. Cette tranche représente une collection de nombres pairs initialement non triés. Pour trier la tranche evenSlice, la fonction sort.Slice() est utilisée avec la tranche. Dans la fonction sort.Slice(), une fonction de tri est fournie en argument. Cette fonction détermine l'ordre de tri en comparant les deux éléments de la tranche aux indices « i » et « j ». Si evenSlice[i] est inférieur à evenSlice[j], il renvoie true ; sinon, il renvoie faux. La fonction sort.Slice() utilise cette fonction de comparaison pour réorganiser les éléments de la tranche 'evenSlice' dans l'ordre croissant.







Les résultats de la tranche triée par ordre croissant sont générés dans l'écran de sortie suivant :





Exemple 2 : Golang Sort Part Slice

Ensuite, le tri est appliqué à la sous-tranche de la tranche spécifiée dans l'ordre croissant à l'aide de la fonction sort.Slice() de Go.





emballer principal
importer (
'fmt'
'trier'
)
fonction principal () {
n := [] entier { 9 , 7 , 3 , 5 }
commencer := 0
fin := 3
trier . Tranche ( n [ commencer : fin ], fonction ( je , j entier ) bourdonner {
retour n [ commencer + je ] [ commencer + j ]
})
fmt . Imprimerln ( n )
}

Initialement, nous créons la tranche 'n' avec les valeurs [9, 7, 3, 5]. De plus, deux variables, 'début' et 'fin', sont définies sur 0 et 3, respectivement. Ces variables définissent la plage d'indices dans la tranche 'n' qui sera triée. La fonction 'sort.Slice()' est alors appelée avec la sous-tranche 'n[start:end]' comme premier argument. Cette sous-tranche contient les éléments de « n » dans la plage spécifiée. Après cela, une fonction de tri est donnée comme deuxième argument dans la fonction sort.Slice().

Ici, cette fonction reçoit deux indices, 'i' et 'j', qui représentent les éléments de la sous-tranche. Pour comparer les éléments de la sous-tranche, la fonction de tri accède aux éléments correspondants de la tranche d'origine en utilisant le début offset. Il compare n[start+i] et n[start+j]. Ensuite, la fonction sort.Slice() utilise la fonction de tri fournie pour réorganiser les éléments dans la sous-tranche par ordre croissant.



La sortie suivante indique que les éléments dans la plage spécifiée (du début à la fin-1) sont triés et que les éléments en dehors de la plage restent inchangés :

Exemple 3 : Golang Sort Integer Slice à l'aide de la fonction Sort.Ints()

De plus, le plus pratique pour trier les tranches d'entiers est la fonction sort.Ints() sans qu'il soit nécessaire d'implémenter les méthodes de tri personnalisées. Il agit directement sur les tranches d'entiers et effectue un tri en place. Le programme suivant trie les entiers spécifiés :

emballer principal
importer (
'fmt'
'trier'
)
fonction principal () {
IntSlice := [] entier { dix , 13 , quinze , onze , 14 , 12 }
fmt . Imprimerln ( 'Tranche non triée :' , IntSlice )
trier . Ints ( IntSlice )
fmt . Imprimerln ( 'Tranche triée :' , IntSlice )
}

Tout d'abord, nous déclarons et initialisons la tranche 'IntSlice' avec les valeurs [10, 13, 15, 11, 14, 12] qui représentent une collection d'entiers initialement non triés. Ensuite, la fonction sort.Ints() est appelée avec la tranche 'IntSlice' comme argument pour trier le 'IntSlice'. La fonction sort.Ints() dans ce cas trie en interne chaque partie de la tranche selon un algorithme de tri optimisé. Il modifie directement la tranche d'origine, réorganisant ses éléments dans un ordre trié.

La sortie suivante montre d'abord que la tranche non triée est affichée en premier, suivie de la tranche triée :

Exemple 4 : tranche de chaîne de tri Golang

Go propose également la fonction sort.Strings() du package sort qui est utilisée pour trier une tranche de chaînes dans un ordre spécifique. Ici, le programme suivant aide à trier la tranche de chaînes :

emballer principal
importer (
'fmt'
'trier'
)
fonction principal () {
strSl := [] chaîne { 'golan' , 'python' , 'Java' , 'perlé' , 'manuscrit' }
trier . Cordes ( strSl )
fmt . Imprimerln ( strSl )
}

Nous avons d'abord établi la tranche « strSl » avec les valeurs [« golang », « python », « java », « perl », « typescript »] qui ne sont pas triées. Après cela, nous trions la tranche « strSl » avec la fonction sort.Strings() qui trie les éléments de la tranche dans l'ordre lexicographique. Cette fonction modifie directement la tranche d'origine, en réorganisant ses éléments dans un ordre trié en fonction de leurs valeurs ASCII.

La sortie trie la tranche de chaîne par ordre croissant, comme indiqué ci-dessous :

Exemple 5 : Golang Check Sort Slice à l'aide de la fonction IntAreSort()

Cependant, avec la fonction sort.IntsAreSorted() de Go, nous pouvons vérifier si une tranche donnée d'entiers est triée par ordre croissant ou non. Considérez l'exemple de programme suivant de la fonction IntAreSort() pour la tranche donnée :

emballer principal
importer (
'fmt'
'trier'
)
fonction principal () {
sl := [] entier { - 33 , 105 , - 42 , 59 , 18 , 0 , - 3 }
fmt . Imprimerln ( « Tranches : » )
fmt . Imprimerln ( « Tranche non triée : » , sl )
résultat := trier . Les entiers sont triés ( sl )
fmt . Imprimerln ( ' \n Résultat:' )
fmt . Imprimerln ( 'Est-ce que Slice est trié ? : ' , résultat )
}

Tout d'abord, une tranche non triée d'entiers aléatoires est définie comme 'sl'. Cette tranche contient une collection d'entiers sans ordre particulier. Ensuite, nous appelons la fonction sort.IntsAreSorted() et passons la tranche 'sl' comme argument. Cette fonction fournit un résultat booléen qui indique si l'entrée de la tranche est organisée ou non par ordre croissant. Ensuite, la fonction fmt.Println() imprime les résultats qui indiquent si la tranche donnée est triée ou non en fonction de la valeur booléenne renvoyée.

La sortie affiche false pour l'ordre de tri d'une tranche d'entiers car elle n'est pas triée :

Exemple 6 : Tranche de tri inverse Golang

De plus, en utilisant les fonctions sortReverse() et sortStringSlice() du package de tri dans Go, nous pouvons trier en sens inverse une tranche de chaînes. Le programme suivant illustre le fonctionnement de la fonction sort.Reverse() :

emballer principal
importer (
'fmt'
'trier'
)
fonction principal () {
voyelletranche := [] chaîne { 'C'est' , 'un' , 'je' , 'dans' , 'O' }
fmt . Imprimerln ( 'Avant de trier :' , voyelletranche )
trier . Trier ( trier . Inverse ( trier . StringSlice ( voyelletranche )))
fmt . Imprimerln ( 'Après le tri :' , voyelletranche )
}

Nous commençons par définir une tranche de la chaîne « voyelSlice » qui contient les voyelles « e », « a », « i », « u » et « o ». Le contenu initial de la tranche de chaînes spécifiée est imprimé en premier à l'aide de la fonction 'print'. Ensuite, l'opération de tri est effectuée à l'aide de la fonction sort.Sort() avec les fonctions sort.Reverse() et sort.StringSlice() comme arguments. Ici, le 'sort.Reverse()' crée un nouveau type qui inverse l'ordre des éléments. Il prend le type 'sort.StringSlice' comme argument qui convertit la voyelleSlice en un type triable.

La sortie affiche ici les voyelles dans l'ordre alphabétique inverse :

Conclusion

Nous nous sommes penchés sur diverses fonctions de tri avec des exemples qui trient la tranche fournie. Nous avons également couvert le tri des sous-tranches et la vérification si une tranche est déjà triée. Par conséquent, nous pouvons tirer parti des capacités du package de tri pour relever un large éventail de défis de tri dans leurs projets Go.