Maison  >  Article  >  Java  >  Discussion approfondie sur les principes et les étapes de mise en œuvre de l'algorithme de tri rapide Java

Discussion approfondie sur les principes et les étapes de mise en œuvre de l'algorithme de tri rapide Java

WBOY
WBOYoriginal
2024-02-19 08:05:06375parcourir

Discussion approfondie sur les principes et les étapes de mise en œuvre de lalgorithme de tri rapide Java

Explication détaillée du principe et de la mise en œuvre de Java Quick Sort

Quick Sort est un algorithme de tri couramment utilisé. Sa mise en œuvre est simple et efficace, et c'est l'un des algorithmes récursifs classiques. Cet article présentera en détail le principe et la mise en œuvre du tri rapide et fournira des exemples de code Java spécifiques.

  1. Principe
    Le tri rapide utilise la stratégie diviser pour régner pour diviser la séquence à trier en deux parties, trier respectivement les parties gauche et droite, et enfin toute la séquence est en ordre. L'idée principale est de placer un élément dans sa position finale via un seul tri, même s'il peut être déplacé plusieurs fois au cours du processus de tri.

Les étapes générales du tri rapide sont les suivantes :
(1) Sélectionnez un élément de référence et divisez la séquence en deux parties, afin que les éléments de gauche soient inférieurs ou égaux au repère, et les éléments de right sont tous deux supérieurs ou égaux à la référence ;
(2) Associez récursivement les éléments gauche et droit Triez rapidement les deux parties.

  1. Implémentation
    Ce qui suit est un exemple de code d'implémentation du tri rapide en Java :
public class QuickSort {
    public static void quickSort(int[] arr, int low, int high) {
        if (low < high) {
            int partitionIndex = partition(arr, low, high);
            quickSort(arr, low, partitionIndex - 1);
            quickSort(arr, partitionIndex + 1, high);
        }
    }

    private static int partition(int[] arr, int low, int high) {
        int pivot = arr[high];
        int i = low - 1;

        for (int j = low; j < high; j++) {
            if (arr[j] < pivot) {
                i++;
                swap(arr, i, j);
            }
        }
        
        swap(arr, i + 1, high);
        
        return i + 1;
    }

    private static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    public static void main(String[] args) {
        int[] arr = {9, 2, 4, 7, 1, 5, 3, 8, 6};
        
        System.out.println("Before sorting:");
        for (int num : arr) {
            System.out.print(num + " ");
        }
        
        quickSort(arr, 0, arr.length - 1);
        
        System.out.println("
After sorting:");
        for (int num : arr) {
            System.out.print(num + " ");
        }
    }
}

Dans le code ci-dessus, nous définissons une méthode statique quickSort, qui accepte un tableau d'entiers, en commençant et l'index de fin comme paramètres. Dans la méthode quickSort, déterminez d'abord si l'index de départ est plus petit que l'index de fin. Si la condition est remplie, l'élément de base est sélectionné et partitionné via la méthode partition. Dans la méthode partition, nous utilisons le dernier élément comme élément de base, parcourons les éléments entre l'index de début et l'index de fin et échangeons des éléments plus petits que l'élément de base avec des éléments plus grands que l'élément de base. Enfin, remplacez l'élément de base dans sa position finale et remettez cette position. quickSort,它接受一个整型数组、起始和结束索引作为参数。quickSort方法中,首先判断起始索引是否小于结束索引,如果满足条件,则选取基准元素,并通过partition方法进行分区操作。partition方法中,我们以最后一个元素作为基准元素,遍历起始索引到结束索引之间的元素,将小于基准元素的元素与大于基准元素的元素进行交换。最后,交换基准元素到最终位置,返回该位置。

main方法中,我们创建一个整型数组并初始化。然后,调用quickSort

Dans la méthode main, nous créons un tableau d'entiers et l'initialisons. Ensuite, appelez la méthode quickSort pour trier le tableau et afficher les résultats avant et après le tri.

  1. Analyse
  2. La complexité temporelle moyenne du tri rapide est O(nlogn), et la complexité temporelle dans le pire des cas est O(n^2). Il s'agit d'un algorithme de tri sur place, c'est-à-dire qu'il peut être trié sur le tableau d'origine.

Étant donné que le tri rapide est implémenté de manière récursive, un débordement de pile peut se produire dans le pire des cas. Afin de résoudre ce problème, vous pouvez utiliser une méthode non récursive ou optimiser l'appel récursif.

Le tri rapide est un algorithme de tri non stable, c'est-à-dire que l'ordre relatif des mêmes éléments peut être modifié.


Résumé :

Le tri rapide est un algorithme de tri classique avec un principe simple et efficace. Cet article aide les lecteurs à comprendre et à maîtriser les idées et les méthodes de mise en œuvre de l'algorithme de tri rapide en analysant en détail le principe du tri rapide et en fournissant un code d'implémentation Java spécifique. Grâce à la pratique et à l'optimisation, nous pouvons mieux appliquer l'algorithme de tri rapide pour résoudre des problèmes pratiques. 🎜

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!

Déclaration:
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