Swift: File séquentielle -6-

Interclassement de deux files ordonnées

Le programme ci-dessous, permet la fusion de deux files ordonnées conformément au schéma de programme Interclassement.

func Interclassement(file1: File_Entier
                    ,file2: File_Entier
                    ,inout file3: File_Entier) {

   var nouvelleCollection: File_Entier = InitialiserCollection()
   Premier(file1)
   Premier(file2)
   while (!Dernier(file1)) && (!Dernier(file2)) {
      if InferOuEgal(Element(file1),element: Prendre(file2)) {
         nouvelleCollection = Ranger(nouvelleCollection, element: Prendre(file1))
         Avancer(file1)
      } else {
         nouvelleCollection = Ranger(nouvelleCollection, element: Prendre(file2))
         Avancer(file2)
      }
   }
   while !Dernier(file1) {
      nouvelleCollection = Ranger(nouvelleCollection, element: Prendre(file1))
      Avancer(file1)
   }
   while !Dernier(file2) {
      nouvelleCollection = Ranger(nouvelleCollection, element: Prendre(file2))
      Avancer(file2)
   }
   file3 = nouvelleCollection
}

Une version pure Swift du même schéma de programme

func Interclassement(file1: [Int],file2: [Int], inout file3: [Int]) {
   var valeur1 : Entier = 0
   var valeur2 : Entier = 0
   var nouvelleCollection = [Int]()
 
   var index1 = 0
   var index2 = 0
   let nombreElement1 = file1.count
   let nombreElement2 = file2.count
   while (index1 < nombreElement1) && (index2 < nombreElement2) {
      valeur1 = file1[index1]
      valeur2 = file2[index2]
      if valeur1 <= valeur2 {
         nouvelleCollection.append(valeur1)
         valeur1 = file1[index1]
         index1 += 1
      } else {
         nouvelleCollection.append(valeur2)
         valeur2 = file2[index2]
         index2 += 1
      }
   }
   while (index1 < nombreElement1) {
      valeur1 = file1[index1]
      nouvelleCollection.append(valeur1)
      index1 += 1
   }
   while (index2 < nombreElement2) {
      valeur2 = file1[index2]
      nouvelleCollection.append(valeur2)
      index1 += 1
   }
   file3 = nouvelleCollection
}