Maison > développement back-end > C++ > le corps du texte

Programme C/C++ écrit à l'aide d'un algorithme de tri par fusion pour calculer le logarithme inverse dans un tableau ?

PHPz
Libérer: 2023-09-17 23:25:05
avant
841 Les gens l'ont consulté

Le décompte d’inversion qui se produit lors du tri d’un tableau donné est appelé décompte d’inversion. Le problème inverse est un problème classique qui peut être résolu à l’aide de l’algorithme de tri par fusion. Dans ce problème v, nous compterons tous les éléments à sa gauche qui sont supérieurs à lui et ajouterons le nombre à la sortie. Cette logique est complétée dans la fonction de fusion du tri par fusion.

Pour mieux comprendre ce sujet, prenons un exemple. Considérons les deux sous-tableaux impliqués dans le processus de fusion -

Programme C/C++ écrit à laide dun algorithme de tri par fusion pour calculer le logarithme inverse dans un tableau ?

Programme C/C++ écrit à laide dun algorithme de tri par fusion pour calculer le logarithme inverse dans un tableau ?

Programme C/C++ écrit à laide dun algorithme de tri par fusion pour calculer le logarithme inverse dans un tableau ?

Programme C/C++ écrit à laide dun algorithme de tri par fusion pour calculer le logarithme inverse dans un tableau ?

Programme C/C++ écrit à l'aide d'un algorithme de tri par fusion pour calculer le logarithme inverse dans un tableau ?

Input: arr[] = { 1, 9, 6, 4, 5}
Output: Inversion count is 5
Copier après la connexion

Explication

Nombre d'inversions d'un tableau

Donner n un tableau, trouver son inverse Nombre de tours. Si (i < j) et (A[i] > A[j]) alors la paire (i, j) est appelée l'inversion du tableau A. Nous devons compter toutes ces paires dans arr

< p> Par exemple, il y a 5 inversions dans

tableau

(9,6), (9,4), (9,5), (6,4), (6 ,5)

1. Comparez les valeurs des éléments entre eux.

2. Si la valeur à l'index inférieur est plus élevée, incrémentez le compteur.

3. Affichez les résultats.

Exemple

#include <stdio.h>
int Merge(int arr[], int aux[], int low, int mid, int high) {
   int k = low, i = low, j = mid + 1;
   int inversionCount = 0;
   while (i <= mid && j <= high) {
      if (arr[i] <= arr[j]) {
         aux[k++] = arr[i++];
      } else {
         aux[k++] = arr[j++];
         inversionCount += (mid - i + 1); // NOTE
      }
   }
   while (i <= mid)
   aux[k++] = arr[i++];
   for (int i = low; i <= high; i++)
      arr[i] = aux[i];
   return inversionCount;
}
int MergeSort(int arr[], int aux[], int low, int high) {
   if (high == low) // if run size == 1
      return 0;
   int mid = (low + ((high - low) >> 1));
   int inversionCount = 0;
   inversionCount += MergeSort(arr, aux, low, mid);
   inversionCount += MergeSort(arr, aux, mid + 1, high);
   inversionCount += Merge(arr, aux, low, mid, high);
   return inversionCount;
}
int main() {
   int arr[] = { 1, 9, 6, 4, 5 };
   int N = 5;
   int aux[N];
   for (int i = 0; i < N; i++)
      aux[i] = arr[i];
   printf("Inversion count is %d", MergeSort(arr, aux, 0, N - 1));
   return 0;
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal