Heim Backend-Entwicklung PHP-Tutorial Sortieralgorithmus – Sortierung zusammenführen [mit Code]

Sortieralgorithmus – Sortierung zusammenführen [mit Code]

Aug 22, 2019 pm 05:06 PM
排序算法

Sortieralgorithmus – Sortierung zusammenführen [mit Code]

Was ist Zusammenführungssortierung?

Einfach ausgedrückt besteht die Zusammenführungssortierung darin, zwei geordnete Sequenzen zusammenzufügen.

Empfohlenes Tutorial: PHP-Video-Tutorial

So kombinieren Sie zwei geordnete Sequenzen Was ist mit sie zusammen integrieren?

Dann nehmen wir an, dass es M={m1,m2,m3,....,mx} Sequenzen und N ={n1,n2,n3,.... gibt, ny} Sequenz, diese beiden Sequenzen sind bereits geordnete Sequenzen K = {}, vergleichen Sie dann m1 und n1, fügen Sie m1 < n1 hinzu und fügen Sie dann m1 in die K-Sequenz ein Das heißt, m2 und n1 werden das nächste Mal verglichen, bis alle Vergleiche abgeschlossen und in Reihenfolge K gefüllt sind.

Da die Zusammenführungssortierung geordnete Sequenzen integriert, bedeutet das nicht, dass ungeordnete Sequenzen nicht sortiert werden können?

Die Zusammenführungssortierung basiert auf der Divide-and-Conquer-Methode, das heißt, eine völlig ungeordnete Sequenz kann drahtlos geteilt werden, um eine geordnete Sequenz zu erhalten , m2, m3, ...., mx}, die M-Sequenz ist eine völlig ungeordnete Sequenz, dann kann die M-Sequenz in mehrere kleine Sequenzen unterteilt werden - {m1, m2}, {m3, m4 }....{ mx-1, mx}; Zu diesem Zeitpunkt sind diese Sequenzen in Ordnung, dann können sie durch die Zusammenführungsoperation sortiert werden, sodass die Zusammenführungssortierung auch ungeordnete Sequenzen sortieren kann und ihre Geschwindigkeit nach der schnellen Sortierung, die zu Stable gehört, an zweiter Stelle steht Sortierung.

Wie teile ich eine Sequenz auf?

Wie in der vorherigen Frage erwähnt, basiert die Zusammenführungssortierung auf „Teilen und Erobern“, und „Teilen und Erobern“ spiegelt sich in der Teilungssequenz wider. Zum Beispiel: Jetzt gibt es M ={m1, m2, m3, ...., mx}, die erste Division: M1 = {m1, m2, ..., m(x+1)/2}, M2 = {m(x+1 )/2 +1 , m(x+1)/2 +2,...,mx}, nach der ersten Division werden die M1- und M2-Sequenzen erhalten, dann werden M1 und M2 geteilt und nach mehreren Divisionen ist x/2 Erhalten Sie + x% 2 Sequenzen und führen Sie sie dann einzeln zusammen.

Die spezifischen Schritte dieses Algorithmus:

1. Geben Sie die ersten Zeiger links und in der Mitte an (linke Punkte zeigen auf das erste Element von Sequenz 1). , rechts zeigt auf Sequenz 2 (das erste Element)

2. Vergleichen Sie die Größen von links und Mitte und platzieren Sie die kleinen Elemente im neuen Raum

3. Wiederholen Sie Schritt 2, bis eines der Sequenzen wurden durchlaufen

 4. Kopieren Sie die verbleibenden Elemente, die nicht zum neuen Raum hinzugefügt wurden, und fügen Sie sie direkt in den neuen Raum ein

Die Kernschritte des Algorithmus :

1. Verwenden Sie die Divide-and-Conquer-Methode (Rekursion), um die Sequenz aufzuteilen

2. Vergleichen Sie die Größen von links und in der Mitte und fügen Sie kleine Elemente in die neue ein Leerzeichen

sagt „Abgeschlossen“, fügen Sie den Code ein:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 排序__归并排序
{
    class 归并
    {

        public static int[] arr = { 6, 202, 301, 100, 38, 8, 1 ,-1,1000};
        static void Main(string[] args)
        {
            Sort(arr, 0, arr.Length -1);
            foreach (var item in arr)
            {
                Console.Write(item + "  ");
            }
            Console.ReadKey();
        }

        public static void Sort(int []a,int left,int right)
        {
            if (left >= right) return;
            else
            {
                int mid = (left + right) / 2;                //@1
                Sort(a, left, mid);
                Sort(a, mid + 1, right);
                MergeSort(a, left, mid, right);
            }
        }

        public static void MergeSort(int []a,int left,int mid,int right)
        {
            int[] Arr = new int[right - left + 1];
            int l = left, m = mid +1 , k = 0;           //@2
            while ( m <= right && l <= mid )          //@3
            {
                if (a[l] > a[m]) Arr[k++] = a[m++];
                else Arr[k++] = a[l++];
            }
            while (m < right +1)                           //@4
            {
                Arr[k++] = a[m++];
            }
            while (l < mid +1 )  Arr[k++] = a[l++];        //@4
            for (k = 0, l = left; l < right + 1; k++, l++) a[l] = Arr[k];
        }
    }
}
Nach dem Login kopieren

Codeinterpretation:

 @1: Die Funktion „Sort()“ schließt die Segmentierung der Sequenz ab kann nicht getrennt werden.

@2: l repräsentiert das erste Element von Sequenz 1, m repräsentiert das erste Element von Sequenz 2, k repräsentiert die Anzahl der vorhandenen Elemente im neuen Array Arr

@3: das erste Element von Sequenz 1 Vergleichen Sie es mit dem ersten Element von Sequenz 2, fügen Sie das kleine Element in Arr ein und bewegen Sie den Sequenzcursor rückwärts, bis die Elemente einer der Sequenzen verglichen sind

 @4: Der Vergleichsprozess zwischen Sequenzen 1 und Sequenz 2 kann es so aussehen, als ob Sequenz 1 vollständig zu Arr hinzugefügt wurde, Sequenz 2 jedoch nicht, dann werden die verbleibenden nicht verglichenen Elemente direkt in Arr kopiert

Zusammenfassung:

Der obige Code teilt das Array nicht im eigentlichen Sinne auf. Er füllt das geteilte Array nicht wie andere Codes in ein neues Array. Obwohl es minimal ist, ist es doch nicht so gut. Bei der Zusammenführungsoperation müssen Sie darauf achten, dass die Parameter die Grenze nicht überschreiten (ich habe lange darüber nachgedacht, warum das m über @2 gleich der Mitte +1 sein sollte Der Grund dafür ist eigentlich ganz einfach: Da mid zur linken Sequenz gehört, ist es nicht unmöglich, m = mid +1 in m = mid zu ändern Nachfolgender Code muss ebenfalls geändert werden, aber es besteht keine Notwendigkeit, einen weiteren nutzlosen Vergleich durchzuführen. Über dieses Problem habe ich wirklich lange nachgedacht ...), solange die logische Beziehung geklärt ist lässt sich leicht erfassen.

Das obige ist der detaillierte Inhalt vonSortieralgorithmus – Sortierung zusammenführen [mit Code]. 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)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
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)

Komplexe experimentelle Designprobleme im zweiseitigen Markt von Kuaishou Komplexe experimentelle Designprobleme im zweiseitigen Markt von Kuaishou Apr 15, 2023 pm 07:40 PM

1. Hintergrund des Problems 1. Einführung in das zweiseitige Marktexperiment Der zweiseitige Markt, also eine Plattform, umfasst zwei Teilnehmer, Produzenten und Verbraucher, und beide Parteien fördern sich gegenseitig. Kuaishou hat beispielsweise einen Videoproduzenten und einen Videokonsumenten, und die beiden Identitäten können sich bis zu einem gewissen Grad überschneiden. Bilaterales Experiment ist eine experimentelle Methode, die Gruppen auf Produzenten- und Verbraucherseite vereint. Bilaterale Experimente haben folgende Vorteile: (1) Die Auswirkungen der neuen Strategie auf zwei Aspekte können gleichzeitig erfasst werden, beispielsweise Änderungen im Produkt-DAU und die Anzahl der Personen, die Werke hochladen. Bilaterale Plattformen haben oft netzwerkübergreifende Effekte, je mehr Leser es gibt, desto aktiver werden die Autoren sein, und je aktiver die Autoren sind, desto mehr Leser werden ihnen folgen. (2) Effektüberlauf und -übertragung können erkannt werden. (3) Helfen Sie uns, den Wirkungsmechanismus besser zu verstehen. Das AB-Experiment selbst kann uns nicht nur den Zusammenhang zwischen Ursache und Wirkung aufzeigen

Google nutzt KI, um das Zehn-Jahres-Ranking-Algorithmus-Siegel zu brechen. Es wird jeden Tag Billionen Mal ausgeführt, aber Internetnutzer sagen, es sei die unrealistischste Forschung? Google nutzt KI, um das Zehn-Jahres-Ranking-Algorithmus-Siegel zu brechen. Es wird jeden Tag Billionen Mal ausgeführt, aber Internetnutzer sagen, es sei die unrealistischste Forschung? Jun 22, 2023 pm 09:18 PM

Organisieren |. Nuka-Cola, Chu Es ist eine interessante Herausforderung und es gibt viele Möglichkeiten, sie zu meistern. Es wurde viel Zeit investiert, um herauszufinden, wie Sortieraufgaben effizienter erledigt werden können. Als Grundoperation sind Sortieralgorithmen in die Standardbibliotheken der meisten Programmiersprachen integriert. Es gibt viele verschiedene Sortiertechniken und Algorithmen, die in Codebasen auf der ganzen Welt verwendet werden, um große Datenmengen online zu organisieren, aber zumindest was die mit dem LLVM-Compiler verwendeten C++-Bibliotheken betrifft, hat sich der Sortiercode seit mehr als einem Jahr nicht geändert Jahrzehnt. Kürzlich hat das Google DeepMindAI-Team nun eine entwickelt

So filtern und sortieren Sie Daten in der Vue-Technologieentwicklung So filtern und sortieren Sie Daten in der Vue-Technologieentwicklung Oct 09, 2023 pm 01:25 PM

So filtern und sortieren Sie Daten in der Vue-Technologieentwicklung. In der Vue-Technologieentwicklung sind das Filtern und Sortieren von Daten sehr häufige und wichtige Funktionen. Durch Datenfilterung und -sortierung können wir die benötigten Informationen schnell abfragen und anzeigen und so die Benutzererfahrung verbessern. In diesem Artikel wird das Filtern und Sortieren von Daten in Vue vorgestellt und spezifische Codebeispiele bereitgestellt, um den Lesern zu helfen, diese Funktionen besser zu verstehen und zu verwenden. 1. Datenfilterung Datenfilterung bezieht sich auf das Herausfiltern von Daten, die den Anforderungen basierend auf bestimmten Bedingungen entsprechen. In Vue können wir comp bestehen

So implementieren Sie den Auswahlsortierungsalgorithmus in C# So implementieren Sie den Auswahlsortierungsalgorithmus in C# Sep 20, 2023 pm 01:33 PM

So implementieren Sie den Auswahlsortierungsalgorithmus in C#. Die Auswahlsortierung (SelectionSort) ist ein einfacher und intuitiver Sortieralgorithmus. Seine Grundidee besteht darin, jedes Mal das kleinste (oder größte) Element aus den zu sortierenden Elementen auszuwählen und am Ende einzufügen die sortierte Reihenfolge. Wiederholen Sie diesen Vorgang, bis alle Elemente sortiert sind. Erfahren Sie mehr darüber, wie Sie den Auswahlsortierungsalgorithmus in C# implementieren, zusammen mit spezifischen Codebeispielen. Erstellen einer Auswahlsortierungsmethode Zuerst müssen wir eine Methode zur Implementierung der Auswahlsortierung erstellen. Diese Methode akzeptiert a

Swoole Advanced: So verwenden Sie Multithreading, um einen Hochgeschwindigkeits-Sortieralgorithmus zu implementieren Swoole Advanced: So verwenden Sie Multithreading, um einen Hochgeschwindigkeits-Sortieralgorithmus zu implementieren Jun 14, 2023 pm 09:16 PM

Swoole ist ein leistungsstarkes Netzwerkkommunikations-Framework, das auf der PHP-Sprache basiert. Es unterstützt die Implementierung mehrerer asynchroner E/A-Modi und mehrerer erweiterter Netzwerkprotokolle. Basierend auf Swoole können wir seine Multithreading-Funktion nutzen, um effiziente Algorithmusoperationen zu implementieren, beispielsweise Hochgeschwindigkeits-Sortieralgorithmen. Der Hochgeschwindigkeits-Sortieralgorithmus (QuickSort) ist ein gängiger Sortieralgorithmus. Durch die Lokalisierung eines Benchmark-Elements werden die Elemente, die kleiner als das Benchmark-Element sind, auf der linken Seite platziert, und diejenigen, die größer oder gleich dem Benchmark sind Element werden auf der rechten Seite platziert. Dann werden die linke und die rechte Teilsequenzrekursion platziert

Welche Sortieralgorithmen gibt es für Arrays? Welche Sortieralgorithmen gibt es für Arrays? Jun 02, 2024 pm 10:33 PM

Array-Sortieralgorithmen werden verwendet, um Elemente in einer bestimmten Reihenfolge anzuordnen. Zu den gängigen Arten von Algorithmen gehören: Blasensortierung: Vertauschen Sie Positionen durch Vergleichen benachbarter Elemente. Auswahlsortierung: Finden Sie das kleinste Element und tauschen Sie es an die aktuelle Position aus. Einfügungssortierung: Elemente einzeln an der richtigen Position einfügen. Schnelle Sortierung: Divide-and-Conquer-Methode, wählen Sie das Pivot-Element aus, um das Array zu teilen. Zusammenführungssortierung: Teilen und Erobern, rekursives Sortieren und Zusammenführen von Unterarrays.

So verwenden Sie den Radix-Sortieralgorithmus in C++ So verwenden Sie den Radix-Sortieralgorithmus in C++ Sep 19, 2023 pm 12:15 PM

So verwenden Sie den Basissortieralgorithmus in C++. Der Basissortierungsalgorithmus ist ein nicht vergleichender Sortieralgorithmus, der die Sortierung durch Aufteilen der zu sortierenden Elemente in einen begrenzten Satz von Ziffern abschließt. In C++ können wir den Radix-Sortieralgorithmus verwenden, um eine Menge von Ganzzahlen zu sortieren. Im Folgenden besprechen wir anhand konkreter Codebeispiele ausführlich, wie der Basissortieralgorithmus implementiert wird. Algorithmusidee Die Idee des Radix-Sortieralgorithmus besteht darin, die zu sortierenden Elemente in einen begrenzten Satz digitaler Bits zu unterteilen und die Elemente dann nacheinander nach jedem Bit zu sortieren. Die Sortierung nach jedem Bit ist abgeschlossen

So implementieren Sie eine einfache Sortieralgorithmusfunktion mit MySQL und Java So implementieren Sie eine einfache Sortieralgorithmusfunktion mit MySQL und Java Sep 20, 2023 am 09:45 AM

So implementieren Sie mit MySQL und Java eine einfache Sortieralgorithmusfunktion. Einführung: In der Softwareentwicklung gehören Sortieralgorithmen zu den grundlegendsten und am häufigsten verwendeten Funktionen. In diesem Artikel wird erläutert, wie Sie mithilfe von MySQL und Java eine einfache Sortieralgorithmusfunktion implementieren, und es werden spezifische Codebeispiele bereitgestellt. 1. Übersicht über Sortieralgorithmen Sortieralgorithmen sind Algorithmen, die einen Datensatz nach bestimmten Regeln anordnen. Zu den häufig verwendeten Sortieralgorithmen gehören Blasensortierung, Einfügungssortierung, Auswahlsortierung, Schnellsortierung usw. In diesem Artikel wird die Blasensortierung als Beispiel zur Erläuterung und Implementierung verwendet. 2. M

See all articles