Tout ce que vous devez savoir sur Quicksort en C ++



Cet article vous fournira une connaissance détaillée et complète de la façon d'implémenter Quicksort en C ++ avec des exemples.

Il existe une pléthore d'algorithmes de tri. Trouver le bon ajustement pour votre application est une tâche qui nécessite une brève compréhension de facteurs tels que les performances, la complexité du temps, la longueur du code, etc. d'un algorithme particulier. Dans cet article, nous examinerons tous les concepts essentiels nécessaires pour implémenter Quicksort en C ++ dans l'ordre suivant:

Comprendre l'algorithme de tri rapide

Juste comme Tri par fusion , Quicksort suit la stratégie de division et de conquête. En utilisant la stratégie de division et de conquête, nous divisons le problème en plusieurs sous-problèmes et les résolvons de manière récursive. Tout d'abord, nous comprendrons tout le processus étape par étape et ensuite, à l'aide d'un exemple, nous développerons une compréhension approfondie de l'ensemble du processus.





  1. Tout d'abord, nous demanderons le tableau non trié à l'utilisateur.

  2. Une fois que nous avons notre tableau non trié, nous devons sélectionner une valeur pivot dans le tableau. Nous pouvons choisir n'importe quelle valeur.



  3. Une fois que nous avons sélectionné le point de pivot, nous devons organiser les autres éléments du tableau de telle manière que tous les éléments inférieurs à la valeur de pivot doivent être placés à droite de la valeur de pivot et tous les éléments supérieurs au pivot valeur doivent être placés à droite de la valeur pivot.

  4. Nous exécutons l'étape 3 jusqu'à ce que nous obtenions notre tableau trié.

Prenons maintenant un exemple, implémentons l'algorithme et voyons comment il fonctionne.



Bonjour [5, 4, 1, 11, 9, 6, 2, 3] pour cet exemple, nous considérerons toujours le pivot comme l'élément le plus à droite de la liste.

Quicksort en C ++

Passons en revue chaque étape et comprenons la logique que nous avons utilisée pour résoudre le problème.

  • Premièrement, nous avons choisi «3» comme pivot et avons arrangé tous les éléments inférieurs à «3» à droite et tous les éléments supérieurs à «3» à droite.

  • À ce stade, nous avons 2 sous-problèmes. Commençons par résoudre le sous-problème sur la droite. Nous en avons sélectionné un comme pivot et placé «2» à droite.

    algorithme de tri par fusion c ++
  • Pour résoudre le deuxième sous-problème, nous sélectionnons «6» comme pivot et plaçons les éléments comme nous l'avons vu précédemment.

  • Nous avons 2 autres sous-problèmes. Le premier est résolu en sélectionnant 4 comme pivot et le second est résolu en sélectionnant 9 comme pivot. Enfin, nous avons notre tableau trié avec les éléments placés à l'index souligné.

Remarque- Le point important à comprendre ici est que toutes les opérations ont lieu dans le même tableau. Les nouveaux tableaux ne sont pas créés.

Pseudocode pour Quicksort en C ++

QuickSort (array [], start_index, end_index) {if (start_index

Programme de Quicksort en C ++

Nous avons compris l'algorithme et développé une compréhension approfondie du fonctionnement de l'algorithme. Implémentons Quicksort en C ++ et écrivons un programme pour trier un tableau.

#include using namespace std void swap_elements (int * a, int * b) {int temp = * a * a = * b * b = temp} int partition (int array [], int start_index, int end_index) {int pivot = array [end_index] int i = (start_index - 1) for (int j = start_index j<= end_index- 1 j++) { if (array[j] <= pivot) { i++ swap_elements(&array[i], &array[j]) } } swap_elements(&array[i + 1], &array[end_index]) return (i + 1) } void quickSort(int array[], int start_index, int end_index) { if (start_index < end_index) { int partition_index = partition(array, start_index, end_index) quickSort(array, start_index, partition_index - 1) quickSort(array, partition_index + 1, end_index) } } void printArray(int array[], int number) { int i cout<<'Sorted Array: ' for (i = 0 i < number i++) cout << array[i] << ' ' cout << endl } int main() { int Hello[30] int i int NumberofElements cout<>NumberofElements cout<<'Enter the elements one by one: ' for(i=0i>Bonjour [i]} quickSort (Hello, 0, NumberofElements-1) printArray (Hello, NumberofElements) return 0}

Production:

Complexité temporelle

Parlons de l'aspect le plus important de tout algorithme de tri, à savoir la complexité temporelle. Il nous renseigne sur les performances de l'algorithme dans divers scénarios. Ces valeurs peuvent nous aider à décider si nous pouvons utiliser cet algorithme pour notre application.

  • Meilleur cas- Sur)
  • Cas moyen (nlogn)
  • Pire cas- Sur2)

Avec cela, nous arrivons à la fin de cet article Quicksort in C ++. Si vous souhaitez en savoir plus, consultez le par Edureka, une entreprise d'apprentissage en ligne de confiance. Le cours de formation et de certification Java J2EE et SOA d'Edureka est conçu pour vous former aux concepts Java de base et avancés ainsi qu'à divers frameworks Java tels que Hibernate et Spring.

Vous avez une question pour nous? Veuillez le mentionner dans la section commentaires de ce blog et nous vous répondrons dans les plus brefs délais.