Heim Java javaLernprogramm Einfaches Beispiel für eine schnelle Sortierung in Java

Einfaches Beispiel für eine schnelle Sortierung in Java

Aug 11, 2017 am 09:36 AM
java 示例 简单

In diesem Artikel werden hauptsächlich einfache Java-Sortierbeispiele im Detail vorgestellt, die einen bestimmten Referenzwert haben

Grundkonzepte

Finden ein Element (theoretisch können Sie jedes finden) als Pivot (Pivot) und dann das Array so aufteilen, dass der Wert des Elements auf der linken Seite des Pivots nicht größer ist als der Pivot-Wert und der Wert des Elements auf der rechten Seite des Drehpunkts ist nicht kleiner als der Basiswert, damit das Basiselement nach dem Sortieren an die richtige Position angepasst wird. Durch die rekursive Schnellsortierung werden die anderen n-1 Elemente nach dem Sortieren an die richtige Position gebracht. Schließlich befindet sich jedes Element nach dem Sortieren an der richtigen Position und die Sortierung ist abgeschlossen. Daher ist der Kernalgorithmus des Schnellsortierungsalgorithmus die Partitionsoperation, d. h. wie die Position des Benchmarks angepasst wird und wie die endgültige Position des zurückgegebenen Benchmarks für die Divide-and-Conquer-Rekursion angepasst wird.

2. Referenzelement auswählen

1. Referenzelement korrigieren

Wenn die Eingabereihenfolge zufällig ist, ist die Verarbeitungszeit akzeptabel. Wenn das Array bereits sortiert ist, ist die Aufteilung zu diesem Zeitpunkt eine sehr schlechte Aufteilung. Da jede Unterteilung die zu sortierende Reihenfolge nur um eins reduzieren kann, ist dies das schlimmste Szenario, bei dem die schnelle Sortierung zur Blasensortierung wird und die zeitliche Komplexität Θ(n^2) beträgt. Darüber hinaus ist es durchaus üblich, dass die Eingabedaten geordnet oder teilweise geordnet sind. Daher ist die Verwendung des ersten Elements als Basiselement sehr schlecht und sollte sofort aufgegeben werden.

2. Zufälliges Basiselement

Dies ist eine relativ sichere Strategie. Da die Position des Referenzelements zufällig ist, ist die resultierende Segmentierung nicht immer eine Segmentierung von schlechter Qualität. Wenn alle Array-Nummern gleich sind, ist dies immer noch der schlimmste Fall und die Zeitkomplexität beträgt O(n^2). Tatsächlich beträgt die Wahrscheinlichkeit, Quicksort zu randomisieren, um den theoretisch schlechtesten Fall zu erhalten, nur 1/(2^n). Daher kann die zufällige Schnellsortierung für die meisten Eingabedaten die erwartete Zeitkomplexität von O(n×log(n)) erreichen.

3. Finden Sie den Mittelwert von drei Zahlen.

Die beste Aufteilung besteht darin, die zu sortierende Folge in Teilfolgen gleicher Länge zu unterteilen Folge, also die N/2-te Zahl. Dies ist jedoch schwer zu berechnen und wird Quicksort erheblich verlangsamen. Eine solche Schätzung des Medians kann durch zufällige Auswahl dreier Elemente und Verwendung ihres Medians als Basiselement erhalten werden. Tatsächlich hilft Zufälligkeit nicht viel, daher besteht der allgemeine Ansatz darin, den Median der drei Elemente am linken Ende, am rechten Ende und in der Mittelposition als Basiselement zu verwenden.

3. Partitionsalgorithmus

Der Partitionsalgorithmus ist der Kern der Schnellsortierung, Sie können diesen Algorithmus zuerst erlernen. Fügen Sie zuerst den Code ein:


  public int partition(int[] num,int left,int right){
    if(num==null || num.length<=0 || left<0 || right>=num.length){
      return 0;
    }
    int prio=num[left+(right-left)/2];  //获取数组中间元素的下标
    while (left<=right){         //从两端交替向中间扫描
      while (num[left]<prio)
        left++;
      while (num[right]>prio)
        right--;
      if (left<=right){
        swap(num,left,right);    //最终将基准数归位 
        left++;
        right--;
      }
    }
    return left;
  }
Nach dem Login kopieren

Die Idee dieser Methode besteht darin, zuerst ein Pivot-Element zu finden (das erste Element wird in der Implementierung dieser Methode gefunden). Es gibt tatsächlich viele Details. Der Artikel wird die Beschreibung hier vereinfachen und dann zwei Zeiger links und rechts von beiden Seiten des Arrays generieren (das genaue Wohin wird durch die übergebenen Parameter bestimmt. Jedes Mal, wenn es gefunden wird). Das Element links ist größer als das Pivotelement, i stoppt, und das Element rechts stoppt. Wenn das Element kleiner als das Pivotelement j ist, stoppt es und die Positionen der beiden Zahlen werden vertauscht. Bis sich die beiden Zeiger links und rechts treffen. Setzen Sie dann das Drehelement in die linke Position ein, wo es sein sollte.

Das Endergebnis besteht darin, dass der [linke, rechte] Teil des Arrays in zwei Teilen erscheint. Die endgültige Position des Pivot-Elements auf der linken Seite ist kleiner oder gleich dem Pivot-Element und Die Endposition rechts ist größer oder gleich dem Pivotelement. Das Schwenkelement wird in einer absolut korrekten Position eingesetzt.

4. Implementierung des Sortieralgorithmus


package sort;
/**
 * 快速排序
 * 快速排序采用了分治策略。就是在一个数组中取一个基准数字,把小的数放基准的左边,大的数放基准的右边。
 * 基准左边和右边分别是新的序列。在新的序列中再取一个基准数字,小的放左边,大的放右边。
 * 这个里面用到的递归。我们需要三个参数,一个是数组,另外两个是序列的边界
 * @author HJS
 */
public class QuickSort{

  void sort(int num[],int left,int right){
    if (left
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonEinfaches Beispiel für eine schnelle Sortierung in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Quadratwurzel in Java Quadratwurzel in Java Aug 30, 2024 pm 04:26 PM

Leitfaden zur Quadratwurzel in Java. Hier diskutieren wir anhand eines Beispiels und seiner Code-Implementierung, wie Quadratwurzel in Java funktioniert.

Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Zufallszahlengenerator in Java Zufallszahlengenerator in Java Aug 30, 2024 pm 04:27 PM

Leitfaden zum Zufallszahlengenerator in Java. Hier besprechen wir Funktionen in Java anhand von Beispielen und zwei verschiedene Generatoren anhand ihrer Beispiele.

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Armstrong-Zahl in Java Armstrong-Zahl in Java Aug 30, 2024 pm 04:26 PM

Leitfaden zur Armstrong-Zahl in Java. Hier besprechen wir eine Einführung in die Armstrong-Zahl in Java zusammen mit einem Teil des Codes.

Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

See all articles