Maison > Java > JavaBase > le corps du texte

Comment résoudre le problème de tri en utilisant la méthode de tri rapide diviser pour régner en Java

王林
Libérer: 2019-11-28 15:45:02
avant
1970 Les gens l'ont consulté

Comment résoudre le problème de tri en utilisant la méthode de tri rapide diviser pour régner en Java

Description du problème :

Après avoir entré un nombre N, entrez N nombres, puis triez la sortie des N nombres .

Entrée :

Comment résoudre le problème de tri en utilisant la méthode de tri rapide diviser pour régner en Java

Sortie :

Comment résoudre le problème de tri en utilisant la méthode de tri rapide diviser pour régner en Java

Conception de l'algorithme :

L'idée de base du tri rapide est basée sur la stratégie diviser pour régner. L'idée de l'algorithme est la suivante :

(1) Décomposition : Premièrement, prenez un élément du tableau comme élément de référence. En prenant l'élément de référence comme standard, décomposez le problème en deux sous-séquences, de sorte que la sous-séquence inférieure ou égale à l'élément de référence soit à gauche et la sous-séquence supérieure au repère. l'élément est à droite.

(2) Gouvernance : Droite Triez rapidement les deux sous-séquences

(3) Fusionner : Fusionnez les deux sous-séquences triées ensemble pour obtenir la solution au problème d'origine.

Recommandation de didacticiel vidéo gratuit : vidéo d'apprentissage Java

Supposons que la séquence actuelle à trier soit R[low:high], où low≤high, si la taille de la séquence est assez petite, triez directement, sinon procédez en 3 étapes Traitement :

(1) Décomposition : Sélectionnez un élément R[pivot] dans R[low:high], et utilisez ceci comme une marque pour diviser la séquence à trier en deux séquences R[low: pivot-1] et R[pivot+1:high], et faire les valeurs de tous les éléments de la séquence R[low:pivot] inférieur ou égal à R[pivot], et rendre tous les éléments de la séquence R[pivot+1:high] supérieurs à R[pivot], à ce moment l'élément de référence est déjà dans la position correcte, et il n'a pas besoin pour participer au tri ultérieur.

(2) Gouvernance : Pour les deux sous-séquences R[low:pivot-1] et R[pivot+ 1:high], le tri est effectué en appelant récursivement l'algorithme de tri rapide.

(3) Fusion : Puisque le tri de R[low:pivot-1] et R[pivot:high] est effectué sur place, donc après R[low:pivot-1] et R[pivot+ 1:high] ont été triés, il n'est pas nécessaire de faire quoi que ce soit lors de l'étape de fusion et la séquence R[low:high] a déjà été triée.

Exemple de code :

//程序目的:用分治法中的快速排序解决排序问题
import java.util.Scanner;
public class text2 {
     public static void swap(int array[],int a,int b){//交换函数
         int temp;
         temp=array[a];
         array[a]=array[b];
         array[b]=temp;
     }
   public  static int Partition(int r[],int low,int high){
        int i=low ;
        int j=high;
        int pivot=r[low];//基准元素
        while(i<j) {
            while (i < j && r[j] > pivot) //向左扫描
                j--;

                if (i < j) {
                    swap(r, i++, j);
                }
                while (i < j && r[i] <= pivot) {//向右扫描
                    i++;
                }
                if (i < j) {
                    swap(r, i, j--);
                }
            }

        return i;
    }
    public static void QuickSort(int R[],int low,int high){//快速排序递归算法
         int mid;
         if(low<high){
             mid=Partition(R,low,high);//基准位置
             QuickSort(R,low,mid-1);//左区间递归快速排序
             QuickSort(R,mid+1,high);//右区间递归快速排序
         }
    }
    public static void main(String args[]){
         Scanner sc=new Scanner (System.in);
         int i;
         int n;//数据的个数
        System.out.println("请先输入要排序元素的个数");
        n=sc.nextInt();
        System.out.println("请输入要排序的数据");
        int []a=new int[n];
         for (i=0;i<n;i++){
             a[i]=sc.nextInt();
         }
         QuickSort(a,0,n-1);
        System.out.println("排序后的数据");
        for (i=0;i<n;i++){
            System.out.print(a[i]+" ");
        }
        System.out.println();
    }
}
Copier après la connexion

Résultats d'exécution :

Comment résoudre le problème de tri en utilisant la méthode de tri rapide diviser pour régner en Java

Tutoriels d'apprentissage associés Recommandé : Tutoriel d'introduction à Java

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:csdn.net
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