Heim Java javaLernprogramm Sortieralgorithmus für Java-Datenstrukturen (1) Baumauswahlsortierung

Sortieralgorithmus für Java-Datenstrukturen (1) Baumauswahlsortierung

May 31, 2017 am 09:27 AM
java 数据结构

In diesem Artikel wird hauptsächlich der Java-Datenstruktur-Sortieralgorithmus Auswahlsortierung vorgestellt. Er analysiert die Prinzipien, Implementierungstechniken und zugehörigen Vorsichtsmaßnahmen für die Java-Baumauswahlsortierung anhand spezifischer Beispiele Folgendes

Dieser Artikel beschreibt als Beispiel den Java-Datenstruktur-Sortieralgorithmus für die Baumauswahlsortierung. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Hier werden wir über die Sortierung eines der Auswahltypen sprechen: Baumauswahlsortierung

Bei der einfachen Auswahlsortierung wird jeder Vergleich durchgeführt Die Ergebnisse des letzten Vergleichs werden nicht verwendet, daher beträgt die zeitliche Komplexität des Vergleichsvorgangs O(N^2). Wenn Sie die Anzahl der Vergleiche reduzieren möchten, müssen Sie die Größenbeziehung dabei speichern der Vergleichsprozess. Die Baumauswahlsortierung ist eine Verbesserung gegenüber der einfachen Auswahlsortierung.

Baumauswahlsortierung: , auch bekannt als Turnier Sortierung) , ist eine Sortierung, die auf dem Turnierdenken basiert Möglichkeiten zur Auswahlsortierung. Führen Sie zunächst einen paarweisen Vergleich der Schlüsselwörter von n Datensätzen durch, führen Sie dann einen paarweisen Vergleich zwischen den n/2 kleineren durch und wiederholen Sie diesen Vorgang, bis der kleinste Datensatz ausgewählt ist.

Der Algorithmus-Implementierungscode lautet wie folgt:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

package exp_sort;

public class TreeSelectSort {

 public static int[] TreeSelectionSort(int[] mData) {

  int TreeLong = mData.length * 4;

  int MinValue = -10000;

  int[] tree = new int[TreeLong]; // 树的大小

  int baseSize;

  int i;

  int n = mData.length;

  int max;

  int maxIndex;

  int treeSize;

  baseSize = 1;

  while (baseSize < n) {

   baseSize *= 2;

  }

  treeSize = baseSize * 2 - 1;

  for (i = 0; i < n; i++) {

   tree[treeSize - i] = mData[i];

  }

  for (; i < baseSize; i++) {

   tree[treeSize - i] = MinValue;

  }

  // 构造一棵树

  for (i = treeSize; i > 1; i -= 2) {

   tree[i / 2] = (tree[i] > tree[i - 1] ? tree[i] : tree[i - 1]);

  }

  n -= 1;

  while (n != -1) {

   max = tree[1];

   mData[n--] = max;

   maxIndex = treeSize;

   while (tree[maxIndex] != max) {

    maxIndex--;

   }

   tree[maxIndex] = MinValue;

   while (maxIndex > 1) {

    if (maxIndex % 2 == 0) {

     tree[maxIndex / 2] = (tree[maxIndex] > tree[maxIndex + 1] ? tree[maxIndex]

       : tree[maxIndex + 1]);

    } else {

     tree[maxIndex / 2] = (tree[maxIndex] > tree[maxIndex - 1] ? tree[maxIndex]

       : tree[maxIndex - 1]);

    }

    maxIndex /= 2;

   }

  }

  return mData;

 }

 public static void main(String[] args) {

  // TODO Auto-generated method stub

  int array[] = { 38, 62, 35, 77, 55, 14, 35, 98 };

  TreeSelectionSort(array);

  for (int i = 0; i < array.length; i++) {

   System.out.print(array[i] + " ");

  }

  System.out.println("\n");

 }

}

Nach dem Login kopieren

Algorithmusanalyse:

Bei der Sortierung der Baumauswahl durchlaufen alle ausgewählten kleinsten Schlüsselwörter einen Vergleichsprozess von Blattknoten zu Folgeknoten. Da ein vollständiger Binärbaum n Blattknoten enthält, beträgt die Tiefe log2n+1 Daher sind bei der Baumauswahlsortierung jedes Mal log2n-Vergleiche erforderlich, sodass die Zeitkomplexität O (nlog2n) beträgt Die Komplexität beträgt O(nlog2n). Im Vergleich zum einfachen Auswahlsortieralgorithmus wird die Anzahl der Vergleiche um eine Größenordnung reduziert und n-1 zusätzlicher Speicherplatz zum Speichern der Zwischenvergleichsergebnisse hinzugefügt.

Ergänzung:

Hier stellen wir einen verbesserten Algorithmus für die Baumauswahlsortierung vor, nämlich den Heap-Sort-Algorithmus.

Heap-Sortierung gleicht den Mangel des Baumauswahl-Sortieralgorithmus aus, der viel Platz beansprucht. Bei Verwendung der Heap-Sortierung ist nur ein Hilfsraum in Datensatzgröße erforderlich.

Die Idee des Algorithmus ist:

Speichern Sie die Schlüsselwörter der zu sortierenden Datensätze im Arrayr[1.. .n] und setze r Es wird als sequentielle Darstellung eines vollständigen Binärbaums betrachtet. Der erste Datensatz r[1] wird als Wurzel des Binärbaums verwendet. 2...n] ist Schicht für Schicht von links nach rechts angeordnet, das linke Kind jedes Knotens r[i] ist r[2*i], das rechte Kind ist r[2*i+1]. ; das übergeordnete Element ist r[[i/2]].

Heap-Definition: Der Schlüsselwert jedes Knotens erfüllt die folgenden Bedingungen:

r[i].key >= r[2i].key und r[ i].key >= r[2i+1].key (i=1,2,...[i/2])

Ein vollständiger Binärbaum, der die oben genannten Bedingungen erfüllt, wird als groß bezeichnet Root-Heap; im Gegenteil, wenn der Schlüssel eines Knotens in diesem vollständigen Binärbaum kleiner oder gleich dem Schlüssel seines linken und rechten Kindes ist, wird der entsprechende Heap als kleiner Root-Heap bezeichnet.

Der Prozess der Heap-Sortierung muss hauptsächlich zwei Probleme lösen: Das erste besteht darin, einen anfänglichen Heap gemäß der Heap-Definition zu erstellen. Das zweite besteht darin, den Heap nach dem Entfernen des größten Elements neu aufzubauen, um das untergrößte zu erhalten Element.

Bei der Heap-Sortierung werden die Eigenschaften des Heaps verwendet, um die Datensatzsequenz zu sortieren:

1. Erstellen Sie einen Heap für die angegebene Sequenz die Oberseite des Heaps; (erste Elementaustausch mit dem Endelement)
3. Erstellen Sie den Heap mit den verbleibenden Elementen neu.
4. Wiederholen Sie die Schritte 2 und 3, bis alle Elemente ausgegeben sind.

Hinweis: „Filtern“ muss beim [n/2]-ten Knoten beginnen und Schicht für Schicht rückwärts bis zum Wurzelknoten vorgehen.

Algorithmusanalyse:

1. Für einen Heap mit einer Tiefe von k beträgt die Anzahl der zum „Filtern“ erforderlichen Schlüsselwortvergleiche höchstens 2(k-1 ) ;

2. Die Heap-Tiefe von n Schlüsselwörtern beträgt [log2n]+1, und die Anzahl der Schlüsselwortvergleiche, die zum anfänglichen Erstellen des Heaps erforderlich sind, beträgt höchstens: n* [log2n];
3 n- 1 Mal überschreitet die Anzahl der erforderlichen Schlüsselwortvergleiche nicht: (n-1)*2 [log2n] Daher beträgt die zeitliche Komplexität der Heap-Sortierung im schlimmsten Fall O(nlog2n). Dies ist der größte Vorteil der Heap-Sortierung.

[Verwandte Empfehlungen]

1. Detailliertes Tutorial zur Auswahlsortierung (Selection Sort_java) in Java

2. Java-Datenstruktursortierung Algorithmus (2) Zusammenführungssortierung

3. Java-Datenstruktur-Sortieralgorithmus (3) Einfache Auswahlsortierung

4 (4) Auswahlsortierung

Das obige ist der detaillierte Inhalt vonSortieralgorithmus für Java-Datenstrukturen (1) Baumauswahlsortierung. 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 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Zwei -Punkte -Museum: Alle Exponate und wo man sie finden kann
1 Monate 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.

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.

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.

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