-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtri.go
56 lines (42 loc) · 1.34 KB
/
tri.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package tri
/*
On dispose d'un ensemble de rectangle, chacun portant un nom (représentés par une structure "rectangle"). On souhaite trier ces rectangles de la manière suivante :
- de la plus petite surface à la plus grande surface (on rappelle que la surface d'un rectangle est le produit de sa largeur par sa longueur)
- en cas d'égalité de surface, du nom le plus court au nom le plus long
- en cas d'égalité de surface et de longueur de nom, en ordre alphabétique des noms
C'est le rôle de la fonction ranger de réaliser ce tri.
# Entrée
- t : un tableau de rectangles
# Sortie
- enOrdre : un tableau contenant les mêmes rectangles mais trié selon la méthode décrite ci-dessus
# Info
2024-2025, test 2, exercice 7
*/
type rectangle struct {
nom string
largeur int
longueur int
}
func estPlusGrand(a, b rectangle) bool{
surfaceA := a.largeur*a.longueur
surfaceB := b.largeur*b.longueur
if surfaceA == surfaceB {
if len(a.nom) == len(b.nom) {
return a.nom > b.nom
}
return len(a.nom) > len(b.nom)
}
return surfaceA > surfaceB
}
func ranger(t []rectangle) (enOrdre []rectangle) {
enOrdre = append(enOrdre, t...)
var i, j int
for i = 0; i < len(enOrdre); i ++ {
v := enOrdre[i]
for j = i - 1; j >= 0 && estPlusGrand(enOrdre[j], v); j -- {
enOrdre[j + 1] = enOrdre[j]
}
enOrdre[j + 1] = v
}
return enOrdre
}