


Programme C/C++ écrit à l'aide d'un algorithme de tri par fusion pour calculer le logarithme inverse dans un tableau ?
Sep 17, 2023 pm 11:25 PMLe 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 -
Input: arr[] = { 1, 9, 6, 4, 5} Output: Inversion count is 5
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 danstableau
(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; }
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!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Comment supprimer les éléments en double du tableau PHP à l'aide de la boucle foreach ?

Inversion des valeurs clés du tableau PHP : analyse comparative des performances de différentes méthodes

Pratique du tri multidimensionnel des tableaux PHP : des scénarios simples aux scénarios complexes

L'art de PHP Array Deep Copy : utiliser différentes méthodes pour obtenir une copie parfaite

Application de la fonction de regroupement de tableaux PHP dans le tri des données

Meilleures pratiques pour la copie approfondie des tableaux PHP : découvrez des méthodes efficaces

Le rôle de la fonction de regroupement de tableaux PHP dans la recherche d'éléments en double

Algorithme de fusion et de déduplication de tableaux PHP : solution parallèle
