Swift: File séquentielle -9-

Recherche du maximum et du minimum

La réalisation du Tri d’une file séquentielle, étudié dans la page suivante est particulièrement inefficace et très peu utilisé dans la pratique. Il nécessite la recherche du minimum dans une file séquentielle. Le principe de cet algorithme de Tri est de chercher le premier élément minimum dans la file et de le ranger dans la nouvelle file. La recherche continue jusqu’à la fin de file pour trouver éventuellement et ranger tous les éléments minimum de même valeur.

Recherche de maximum dans une file séquentielle

Pour initialiser l’algorithme il faut connaitre une valeur minimum avant de rentre dans la boucle itérative. Hors on doit aussi tester le cas ou la file est vide. La primitive Premier, placée avant la primitive Dernier, nous permet soit de positionner le curseur sur le premier élément, soit de retourner Faux si la file est vide . Ce test avant la boucle permet donc d’assurer la cohérence de l’algorithme.

func RechercheElementMaximum(file: File_Entier) -> Entier {
   var max : Entier = 0
   var element : Entier = 0
   if Premier(file) {
      max = Prendre(file)
      element = max
   }
   while !Dernier(file) {
      if Infer(max, element: element) {
         max = element
      }
      element = Prendre(file)
      Avancer(file)
   }
   return max
}
Recherche de minimum dans une file séquentielle
func RechercheElementMinimum(file: File_Entier) -> Entier {
   var min : Entier = 0
   var element : Entier = 0
   if Premier(file) {
      min = Prendre(file)
      element = min
   }
   while !Dernier(file) {
      if Super(min, element: element) {
        min = element
      }
      element = Prendre(file)
      Avancer(file)
   }
   return min
}
Recherche de minimum et du maximum dans une file séquentielle
func RechercheElementMinMax(file: File_Entier) ->  (minimum: Entier, maximum: Entier) {
    var min: Entier = 0
    var max : Entier = 0
    var element : Entier = 0
    if Premier(file) {
        min = Prendre(file)
        element  = min
    }
    while !Dernier(file) {
        if Super(min, element: element) {
            min = element
        } else if Infer(max, element: element) {
            max = element
        }
        element = Prendre(file)
        Avancer(file)
    }
    return (min, max)
}
Une version MinMax pure Swift
func MinMax(collection: [Int]) -> (max: Int, min: Int) {
    var element : Int = 0
    var max : Int = 0
    var min : Int = 0
    var index = 0
    let nombreElement = collection.count
    if index < nombreElement { min = collection[index] }
    while  index < nombreElement {
        element = collection[index]
        if element < min {
            min = element
        } else if element > max {
            max = element
        }
        index += 1
    }
    return (max, min)
}

Recherche de minimum et du maximum d’une file d’éléments de tye « generic »
On donne ici, pour information, le programme qui met en œuvre la généricité.

func minMax<T: Comparable>(vecteur: [T]) -> (min: T, max: T)? {
    if vecteur.isEmpty { return nil }
    var minimum = vecteur[0]
    var maximum = vecteur[0]
    for element in vecteur {
        if element < minimum {
            minimum = element
        } else if element > maximum {
            maximum = element
        }
    }
    return (minimum, maximum)
}