Heim Java javaLernprogramm Beherrschen Sie schnell den Java-Sortieralgorithmus - schnelle Sortierung (Bild und Text)

Beherrschen Sie schnell den Java-Sortieralgorithmus - schnelle Sortierung (Bild und Text)

Nov 29, 2019 pm 04:55 PM
快速排序 算法

Beherrschen Sie schnell den Java-Sortieralgorithmus - schnelle Sortierung (Bild und Text)

Konzept

Schnellsortierung ist eine Austauschsortierung. Der Hauptschritt besteht darin, das Basiselement zum Vergleich zu verwenden. und platzieren Sie die Elemente, die kleiner als das Basiselement sind. Die Elemente, die größer als das Basiselement sind, werden auf eine Seite verschoben, und diejenigen, die größer als das Basiselement sind, werden auf die andere Seite verschoben. Daher wird das Array in zwei Teile geteilt, und dann werden die Referenzelemente aus den beiden Teilen ausgewählt und die obigen Schritte werden wiederholt. Der Prozess ist wie folgt:

(Empfohlenes Video: Java-Video-Tutorial)

Lila: Benchmark-Element
Grün: Größer als Benchmark-Element
Gelb: weniger als Basiselemente

Beherrschen Sie schnell den Java-Sortieralgorithmus - schnelle Sortierung (Bild und Text)

Diese Idee wird als Divide-and-Conquer-Methode bezeichnet.

Grundelement

Die Auswahl des Grundelements ist beliebig. In der folgenden Verwendung verwende ich das erste Element als Basiselement.

Der Sortiervorgang

Der Sortier- und Aufteilungsprozess ist wie folgt:

Lila ist das Basiselement (neu ausgewählt). in jeder Runde)
Grün ist andere Elemente

Erste Runde
Beherrschen Sie schnell den Java-Sortieralgorithmus - schnelle Sortierung (Bild und Text)

Zweite Runde
Beherrschen Sie schnell den Java-Sortieralgorithmus - schnelle Sortierung (Bild und Text)

Dritte Runde
Beherrschen Sie schnell den Java-Sortieralgorithmus - schnelle Sortierung (Bild und Text)

Wie in der Abbildung oben gezeigt:

Wenn die Anzahl der Elemente n ist, beträgt die zeitliche Komplexität O, da der Sortierprozess mit allen Elementen verglichen werden muss (n),
Im Durchschnitt erfordern Sortierrunden logn-Runden, sodass die durchschnittliche Zeitkomplexität der schnellen Sortierung O(nlogn) beträgt.

Die Implementierungsmethoden der Sortierung

Die Implementierungsmethoden umfassen die bilaterale Zirkulationsmethode und die unilaterale Zirkulationsmethode

Bilaterale Zirkulationsmethode

Die erste Möglichkeit besteht darin, das Pivot-Element (Pivot) 4 auszuwählen und die Zeiger nach links und rechts so zu setzen, dass sie auf die Elemente ganz links und ganz rechts im Array zeigen, wie folgt:
Beherrschen Sie schnell den Java-Sortieralgorithmus - schnelle Sortierung (Bild und Text)

Zuerst: Beginnen Sie in dieser Schleife zunächst mit den Daten, auf die der rechte Zeiger (rightData) zeigt, und vergleichen Sie sie mit dem Basiselement.
Wenn rightData >= Pivot, dann bewegt sich der rechte Zeiger nach links . Wenn rightData Pivot ist, werden die Elemente, auf die left und right zeigen, ausgetauscht.

Nach der ersten Runde der Zeigerbewegung ergibt sich folgende Struktur:

Beherrschen Sie schnell den Java-Sortieralgorithmus - schnelle Sortierung (Bild und Text)

Dann werden die Elemente, auf die links und rechts zeigen, ausgetauscht:

Beherrschen Sie schnell den Java-Sortieralgorithmus - schnelle Sortierung (Bild und Text)

Nachdem die erste Runde der Schleife beendet ist, wechseln Sie erneut zum rechten Zeiger und wiederholen Sie die obigen Schritte.

Nach der zweiten Runde erhalten Sie:

Beherrschen Sie schnell den Java-Sortieralgorithmus - schnelle Sortierung (Bild und Text)

Nach der dritten Runde erhalten Sie:

Beherrschen Sie schnell den Java-Sortieralgorithmus - schnelle Sortierung (Bild und Text)

Nach dem vierten Zyklus erhalten wir:

Beherrschen Sie schnell den Java-Sortieralgorithmus - schnelle Sortierung (Bild und Text)

Es wird beurteilt, dass der linke und der rechte Zeiger auf dasselbe Element zeigen, die Zeiger aufhören, sich zu bewegen, und der Drehpunkt und der Zeiger Elemente ausgetauscht werden, erhalten wir:

Beherrschen Sie schnell den Java-Sortieralgorithmus - schnelle Sortierung (Bild und Text)

erklärt das Ende des Zyklus und teilt ihn entsprechend dem Pivot-Element in zwei Teile. Die Arrays dieser beiden Teile werden dann entsprechend bearbeitet zu den oben genannten Schritten.

Implementierungscode

public class DoubleSort {
    public static void quickSort(int[] arr, int startIndex, int endIndex) {

        //递归结束条件
        if (startIndex >= endIndex) {
            return;
        }

        // 基准元素位置
        int pivotIndex = partition(arr, startIndex, endIndex);

        // 根据基准元素,分成两部分进行递归排序
        quickSort(arr, startIndex, pivotIndex - 1);
        quickSort(arr, pivotIndex + 1, endIndex);
    }

    public static int partition(int[] arr, int startIndex, int endIndex) {
        // 取第一个元素为基准元素,也可以随机抽取
        int pivot = arr[startIndex];
        int left = startIndex;
        int right = endIndex;

        while (left != right) {
            // 控制right指针比较并左移
            while (left = pivot) {
                right--;
            }

            // 控制left指针比较并右移
            while (left <p id="单边循环法" style="white-space: normal;">Einseitige Schleifenmethode<strong></strong></p>Bilaterale Schleifenmethode vergleicht und tauscht Elemente von beiden Seiten des Arrays aus, und Die einseitige Schleifenregel verläuft von einer Seite des Arrays und vergleicht und tauscht rückwärts aus, was die Implementierung erleichtert. <p>Der Prozess ist wie folgt: <br></p><blockquote>Zuerst wird das Pivot-Element ausgewählt (kann zufällig ausgewählt werden) <p>Setzen Sie einen Markierungszeiger, der auf die Startposition des Arrays zeigt und das darstellt Bereichsgrenze kleiner als das Pivot-Element (verstehe es nicht. Verstehe es einfach als etwas, das später zum Austauschen von Elementen verwendet wird) <br></p>
</blockquote>Das ursprüngliche Array lautet wie folgt: <p></p><p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/040/b739c5c8ed7df91b0c77a8fae57a6150-11.jpg" class="lazy" alt="Beherrschen Sie schnell den Java-Sortieralgorithmus - schnelle Sortierung (Bild und Text)"></p><blockquote><p>从基准元素下一位开始遍历数组<br>如果该元素大于基准元素,继续往下遍历<br>如果该元素小于基准元素,mark指针往右移,因为小于基准元素的区域边界增大了1(即小于基准元素的多了1位),所以mark就 +1,并且该元素和mark指向元素进行交换。</p></blockquote><p>遍历到元素3时,因为3 </p><p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/040/baca0480a2a4ba4850e39cd5916f2819-12.jpg" class="lazy" alt="Beherrschen Sie schnell den Java-Sortieralgorithmus - schnelle Sortierung (Bild und Text)"></p><p>然后交换元素</p><p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/040/baca0480a2a4ba4850e39cd5916f2819-13.jpg" class="lazy" alt="Beherrschen Sie schnell den Java-Sortieralgorithmus - schnelle Sortierung (Bild und Text)"></p><p>然后就继续遍历,根据上面的步骤进行判断,后面的过程就不写了。</p><p id="实现代码-1"   style="max-width:90%"><strong>实现代码</strong></p><pre class="brush:php;toolbar:false">public class SingleSort {
    public static void quickSort(int[] arr, int startIndex, int endIndex) {

        //递归结束条件
        if (startIndex >= endIndex) {
            return;
        }

        // 基准元素位置
        int pivotIndex = partition(arr, startIndex, endIndex);

        // 根据基准元素,分成两部分进行递归排序
        quickSort(arr, startIndex, pivotIndex - 1);
        quickSort(arr, pivotIndex + 1, endIndex);
    }

    /**
     * 分治(单边循环法)
     * @param arr
     * @param startIndex
     * @param endIndex
     * @return
     */
    public static int partition(int[] arr, int startIndex, int endIndex) {
        // 取第一个元素为基准元素,也可以随机抽取
        int pivot = arr[startIndex];
        int mark = startIndex;

        for(int i = startIndex + 1; i<p id="总结" style="white-space: normal;"><strong>总结</strong></p><p>本人也是初次接触算法,慢慢的去理解算法的思路和实现过程后,真是为自己以往写的算法感到羞愧。该文章也是为了加深自己对快排算法的印象,若文章有不足之处,恳请各位在下方留言补充。感谢各位的阅读。Thanks♪(・ω・)ノ。</p><p>参考资料:《小灰的算法之旅》 第四章。</p><p>本文来自php中文网,<a href="https://www.php.cn/java/base/" target="_blank">java教程</a>栏目,欢迎学习!  </p>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonBeherrschen Sie schnell den Java-Sortieralgorithmus - schnelle Sortierung (Bild und Text). 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
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 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)

CLIP-BEVFormer: Überwacht explizit die BEVFormer-Struktur, um die Leistung der Long-Tail-Erkennung zu verbessern CLIP-BEVFormer: Überwacht explizit die BEVFormer-Struktur, um die Leistung der Long-Tail-Erkennung zu verbessern Mar 26, 2024 pm 12:41 PM

Oben geschrieben und das persönliche Verständnis des Autors: Derzeit spielt das Wahrnehmungsmodul im gesamten autonomen Fahrsystem eine entscheidende Rolle Das Steuermodul im autonomen Fahrsystem trifft zeitnahe und korrekte Urteile und Verhaltensentscheidungen. Derzeit sind Autos mit autonomen Fahrfunktionen in der Regel mit einer Vielzahl von Dateninformationssensoren ausgestattet, darunter Rundumsichtkamerasensoren, Lidar-Sensoren und Millimeterwellenradarsensoren, um Informationen in verschiedenen Modalitäten zu sammeln und so genaue Wahrnehmungsaufgaben zu erfüllen. Der auf reinem Sehen basierende BEV-Wahrnehmungsalgorithmus wird von der Industrie aufgrund seiner geringen Hardwarekosten und einfachen Bereitstellung bevorzugt, und seine Ausgabeergebnisse können problemlos auf verschiedene nachgelagerte Aufgaben angewendet werden.

Implementierung von Algorithmen für maschinelles Lernen in C++: Häufige Herausforderungen und Lösungen Implementierung von Algorithmen für maschinelles Lernen in C++: Häufige Herausforderungen und Lösungen Jun 03, 2024 pm 01:25 PM

Zu den häufigsten Herausforderungen, mit denen Algorithmen für maschinelles Lernen in C++ konfrontiert sind, gehören Speicherverwaltung, Multithreading, Leistungsoptimierung und Wartbarkeit. Zu den Lösungen gehören die Verwendung intelligenter Zeiger, moderner Threading-Bibliotheken, SIMD-Anweisungen und Bibliotheken von Drittanbietern sowie die Einhaltung von Codierungsstilrichtlinien und die Verwendung von Automatisierungstools. Praktische Fälle zeigen, wie man die Eigen-Bibliothek nutzt, um lineare Regressionsalgorithmen zu implementieren, den Speicher effektiv zu verwalten und leistungsstarke Matrixoperationen zu nutzen.

Entdecken Sie die zugrunde liegenden Prinzipien und die Algorithmusauswahl der C++-Sortierfunktion Entdecken Sie die zugrunde liegenden Prinzipien und die Algorithmusauswahl der C++-Sortierfunktion Apr 02, 2024 pm 05:36 PM

Die unterste Ebene der C++-Sortierfunktion verwendet die Zusammenführungssortierung, ihre Komplexität beträgt O(nlogn) und bietet verschiedene Auswahlmöglichkeiten für Sortieralgorithmen, einschließlich schneller Sortierung, Heap-Sortierung und stabiler Sortierung.

Verbesserter Erkennungsalgorithmus: zur Zielerkennung in hochauflösenden optischen Fernerkundungsbildern Verbesserter Erkennungsalgorithmus: zur Zielerkennung in hochauflösenden optischen Fernerkundungsbildern Jun 06, 2024 pm 12:33 PM

01Ausblicksübersicht Derzeit ist es schwierig, ein angemessenes Gleichgewicht zwischen Detektionseffizienz und Detektionsergebnissen zu erreichen. Wir haben einen verbesserten YOLOv5-Algorithmus zur Zielerkennung in hochauflösenden optischen Fernerkundungsbildern entwickelt, der mehrschichtige Merkmalspyramiden, Multierkennungskopfstrategien und hybride Aufmerksamkeitsmodule verwendet, um die Wirkung des Zielerkennungsnetzwerks in optischen Fernerkundungsbildern zu verbessern. Laut SIMD-Datensatz ist der mAP des neuen Algorithmus 2,2 % besser als YOLOv5 und 8,48 % besser als YOLOX, wodurch ein besseres Gleichgewicht zwischen Erkennungsergebnissen und Geschwindigkeit erreicht wird. 02 Hintergrund und Motivation Mit der rasanten Entwicklung der Fernerkundungstechnologie wurden hochauflösende optische Fernerkundungsbilder verwendet, um viele Objekte auf der Erdoberfläche zu beschreiben, darunter Flugzeuge, Autos, Gebäude usw. Objekterkennung bei der Interpretation von Fernerkundungsbildern

Kann künstliche Intelligenz Kriminalität vorhersagen? Entdecken Sie die Möglichkeiten von CrimeGPT Kann künstliche Intelligenz Kriminalität vorhersagen? Entdecken Sie die Möglichkeiten von CrimeGPT Mar 22, 2024 pm 10:10 PM

Die Konvergenz von künstlicher Intelligenz (KI) und Strafverfolgung eröffnet neue Möglichkeiten zur Kriminalprävention und -aufdeckung. Die Vorhersagefähigkeiten künstlicher Intelligenz werden häufig in Systemen wie CrimeGPT (Crime Prediction Technology) genutzt, um kriminelle Aktivitäten vorherzusagen. Dieser Artikel untersucht das Potenzial künstlicher Intelligenz bei der Kriminalitätsvorhersage, ihre aktuellen Anwendungen, die Herausforderungen, denen sie gegenübersteht, und die möglichen ethischen Auswirkungen der Technologie. Künstliche Intelligenz und Kriminalitätsvorhersage: Die Grundlagen CrimeGPT verwendet Algorithmen des maschinellen Lernens, um große Datensätze zu analysieren und Muster zu identifizieren, die vorhersagen können, wo und wann Straftaten wahrscheinlich passieren. Zu diesen Datensätzen gehören historische Kriminalstatistiken, demografische Informationen, Wirtschaftsindikatoren, Wettermuster und mehr. Durch die Identifizierung von Trends, die menschliche Analysten möglicherweise übersehen, kann künstliche Intelligenz Strafverfolgungsbehörden stärken

Anwendung von Algorithmen beim Aufbau einer 58-Porträt-Plattform Anwendung von Algorithmen beim Aufbau einer 58-Porträt-Plattform May 09, 2024 am 09:01 AM

1. Hintergrund des Baus der 58-Portrait-Plattform Zunächst möchte ich Ihnen den Hintergrund des Baus der 58-Portrait-Plattform mitteilen. 1. Das traditionelle Denken der traditionellen Profiling-Plattform reicht nicht mehr aus. Der Aufbau einer Benutzer-Profiling-Plattform basiert auf Data-Warehouse-Modellierungsfunktionen, um Daten aus mehreren Geschäftsbereichen zu integrieren, um genaue Benutzerporträts zu erstellen Und schließlich muss es über Datenplattformfunktionen verfügen, um Benutzerprofildaten effizient zu speichern, abzufragen und zu teilen sowie Profildienste bereitzustellen. Der Hauptunterschied zwischen einer selbst erstellten Business-Profiling-Plattform und einer Middle-Office-Profiling-Plattform besteht darin, dass die selbst erstellte Profiling-Plattform einen einzelnen Geschäftsbereich bedient und bei Bedarf angepasst werden kann. Die Mid-Office-Plattform bedient mehrere Geschäftsbereiche und ist komplex Modellierung und bietet allgemeinere Funktionen. 2.58 Benutzerporträts vom Hintergrund der Porträtkonstruktion im Mittelbahnsteig 58

Analyse des PHP-Algorithmus: effiziente Methode zum Auffinden fehlender Zahlen in einem Array Analyse des PHP-Algorithmus: effiziente Methode zum Auffinden fehlender Zahlen in einem Array Mar 02, 2024 am 08:39 AM

PHP-Algorithmusanalyse: eine effiziente Methode zum Auffinden fehlender Zahlen in einem Array. Bei der Entwicklung von PHP-Anwendungen stoßen wir häufig auf Situationen, in denen wir fehlende Zahlen in einem Array finden müssen. Diese Situation kommt in der Datenverarbeitung und im Algorithmusdesign sehr häufig vor. Daher müssen wir effiziente Suchalgorithmen beherrschen, um dieses Problem zu lösen. In diesem Artikel wird eine effiziente Methode zum Auffinden fehlender Zahlen in einem Array vorgestellt und spezifische PHP-Codebeispiele angehängt. Problembeschreibung Angenommen, wir haben ein Array mit Ganzzahlen zwischen 1 und 100, aber eine Zahl fehlt. Wir müssen ein entwerfen

So implementieren Sie eine schnelle Sortierung mit Python So implementieren Sie eine schnelle Sortierung mit Python Dec 18, 2023 pm 03:37 PM

So implementieren Sie die schnelle Sortierung in Python: 1. Definieren Sie eine Funktion namens quick_sort und verwenden Sie die rekursive Methode, um die schnelle Sortierung zu implementieren. 2. Überprüfen Sie die Länge des Arrays. Wenn die Länge kleiner oder gleich 1 ist, geben Sie das Array direkt zurück. Andernfalls wird das erste Element als Pivotelement (Pivot) verwendet und dann wird das Array in zwei Unterarrays unterteilt, die kleiner als das Pivotelement und größer als das Pivotelement sind. 3. Verbinden Sie die beiden Unterarrays und das Pivot-Element, um ein sortiertes Array zu bilden.

See all articles