Heim > Java > JavaBase > So lösen Sie Sortierprobleme mithilfe der Schnellsortierung in der Divide-and-Conquer-Methode in Java

So lösen Sie Sortierprobleme mithilfe der Schnellsortierung in der Divide-and-Conquer-Methode in Java

王林
Freigeben: 2019-11-28 15:45:02
nach vorne
1979 Leute haben es durchsucht

So lösen Sie Sortierprobleme mithilfe der Schnellsortierung in der Divide-and-Conquer-Methode in Java

Problembeschreibung:

Nachdem Sie eine Zahl N eingegeben haben, geben Sie N Zahlen ein und sortieren Sie dann die ausgegebenen N Zahlen .

Eingabe:

So lösen Sie Sortierprobleme mithilfe der Schnellsortierung in der Divide-and-Conquer-Methode in Java

Ausgabe:

So lösen Sie Sortierprobleme mithilfe der Schnellsortierung in der Divide-and-Conquer-Methode in Java

Algorithmusentwurf:

Die Grundidee der schnellen Sortierung basiert auf der Divide-and-Conquer-Strategie. Die Algorithmusidee lautet wie folgt:

(1) Zerlegung: Erstens. Nehmen Sie ein Element aus dem Array als Referenzelement und zerlegen Sie das Problem in zwei Teilsequenzen, sodass sich die Teilsequenz, die kleiner oder gleich dem Benchmark-Element ist, auf der linken Seite befindet und die Teilsequenz größer als das Benchmark-Element ist Element befindet sich auf der rechten Seite.

(2) Governance: Sortieren Sie die beiden Teilsequenzen schnell.

(3) Zusammenführen: Führen Sie die beiden sortierten Teilsequenzen zusammen, um die Lösung des ursprünglichen Problems zu erhalten.

Kostenlose Video-Tutorial-Empfehlung: Java-Lernvideo

Angenommen, die aktuell zu sortierende Sequenz ist R[low:high], wobei low≤high, if Die Größe der Sequenz ist klein genug, direkt sortieren, andernfalls in 3 Schritten fortfahren. Verarbeitung:

(1) Zerlegung: Wählen Sie ein Element R[pivot] in R[low:high] aus und verwenden Sie es Dies dient als Markierung, um die zu sortierende Sequenz in zwei Sequenzen R[low:pivot-1] und R[pivot+1:high] zu unterteilen und die Werte aller Elemente in der Sequenz R[low:pivot] festzulegen. kleiner oder gleich R[pivot] und machen Sie alle Elemente in der Sequenz R[pivot+1:high] größer als R[pivot], zu diesem Zeitpunkt befindet sich das Referenzelement bereits an der richtigen Position und ist nicht erforderlich um an der anschließenden Sortierung teilzunehmen.

(2) Governance: Für die beiden Teilsequenzen R[low:pivot-1] und R[pivot+ 1:high] erfolgt die Sortierung durch rekursiven Aufruf des Schnellsortierungsalgorithmus.

(3) Zusammenführen: Da die Sortierung von R[low:pivot-1] und R[pivot:high] an Ort und Stelle durchgeführt wird, also nach R[low:pivot-1] und R[pivot+ 1:high] wurden sortiert, es besteht keine Notwendigkeit, im Zusammenführungsschritt etwas zu tun, und die Sequenz R[low:high] wurde bereits sortiert.

Beispielcode:

//程序目的:用分治法中的快速排序解决排序问题
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();
    }
}
Nach dem Login kopieren

Laufergebnisse:

So lösen Sie Sortierprobleme mithilfe der Schnellsortierung in der Divide-and-Conquer-Methode in Java

Verwandte Lerntutorials Empfohlen: Java-Einführungs-Tutorial

Das obige ist der detaillierte Inhalt vonSo lösen Sie Sortierprobleme mithilfe der Schnellsortierung in der Divide-and-Conquer-Methode in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage