C++-Implementierung der Blasensortierung

beschreiben

Der Bubble-Sort-Algorithmus ist ein einfacher Sortieralgorithmus, der benachbarte Elemente sortiert, indem er sie vergleicht und ihre Positionen austauscht. Die Grundidee der Blasensortierung besteht darin, dass in jeder Runde das größte Element des unsortierten Teils nacheinander nach rechts zum äußersten rechten Teil des sortierten Teils verschoben wird, bis alle Elemente in der Reihenfolge von klein nach groß angeordnet sind.

Der Algorithmus der Blasensortierung wird wie folgt beschrieben:

  1. Vergleichen Sie beginnend mit dem ersten Element des Arrays die beiden benachbarten Elemente der Reihe nach. Wenn das vorherige Element größer als das folgende Element ist, tauschen Sie ihre Positionen aus.
  2. Vergleichen Sie weiterhin das nächste Paar benachbarter Elemente und wiederholen Sie die obigen Schritte, bis das vorletzte Element des Arrays verglichen ist.
  3. Wiederholen Sie die obigen Schritte, bis alle Elemente in der Reihenfolge von klein nach groß angeordnet sind.

Zeitkomplexität und Raumkomplexität

Die zeitliche Komplexität der Blasensortierung beträgt O(n^2), wobei n die Anzahl der zu sortierenden Elemente im Array ist. Im schlimmsten Fall und im durchschnittlichen Fall der Blasensortierung beträgt die Anzahl der erforderlichen Vergleiche n(n-1)/2, d. h. die Anzahl der Vergleichsrunden beträgt n-1 und die Anzahl der Vergleiche in jeder Runde beträgt ni- 1, wobei i die aktuelle Runde darstellt. Zahl.

Die Platzkomplexität der Blasensortierung beträgt O(1), d. h. es ist kein zusätzlicher Platz zum Speichern von Array-Elementen erforderlich. Die Blasensortierung sortiert an Ort und Stelle, indem nur die Positionen benachbarter Elemente ausgetauscht werden, sodass nur eine konstante Menge an zusätzlichem Platz benötigt wird.

Illustration

Fügen Sie hier eine Bildbeschreibung ein

Beispiel

#include <iostream>
using namespace std;

void bubbleSort(int arr[], int n) {
    
    
    for (int i = 0; i < n-1; i++) {
    
    
        for (int j = 0; j < n-i-1; j++) {
    
    
            if (arr[j] > arr[j+1]) {
    
    
                swap(arr[j], arr[j+1]);
            }
        }
    }
}

int main() {
    
    
    int arr[] = {
    
    64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(arr)/sizeof(arr[0]);
    bubbleSort(arr, n);
    cout << "冒泡排序: \n";
    for (int i=0; i < n; i++) {
    
    
        cout << arr[i] << " ";
    }
    cout << endl;
    return 0;
}

Die Ausgabe ist:

冒泡排序: 
11 12 22 25 34 64 90

Vor- und Nachteile der Blasensortierung

Vorteil:

  1. Einfach und leicht zu verstehen: Bubble Sort ist einer der einfachsten Sortieralgorithmen und lässt sich leicht implementieren und verstehen.
  2. Kein zusätzlicher Platzbedarf: Bubble Sort sortiert an Ort und Stelle und benötigt keinen zusätzlichen Platz zum Speichern der Sortierergebnisse.
  3. Stabilität: Bubble Sort ist ein stabiler Sortieralgorithmus, das heißt, die relative Reihenfolge gleicher Elemente ändert sich nicht.

Mangel:

  1. Geringe Effizienz: Die zeitliche Komplexität der Blasensortierung beträgt O(n^2), und die Leistung ist bei großen Datenmengen schlecht, insbesondere im Vergleich zu anderen effizienten Sortieralgorithmen.
  2. Nicht für große Datenmengen geeignet: Aufgrund der hohen zeitlichen Komplexität der Blasensortierung ist sie nicht für die Sortierung großer Datenmengen geeignet.
  3. Nicht für Situationen mit umgekehrter Reihenfolge geeignet: Für Daten, die grundsätzlich bereits in der richtigen Reihenfolge oder in umgekehrter Reihenfolge vorliegen, erfordert die Blasensortierung mehr Austauschvorgänge und ist ineffizient.

Blasensortiertechniken

  1. Die Kernidee der Blasensortierung besteht darin, benachbarte Elemente zu vergleichen und auszutauschen. Sie können ein Flag-Bit setzen, um aufzuzeichnen, ob ein Austausch durchgeführt wurde. Wenn während einer Durchquerung kein Austausch durchgeführt wird, bedeutet dies, dass das Array bereits in Ordnung ist und Sie können die Sortierung vorzeitig beenden.

  2. Die äußere Schleife steuert die Anzahl der Vergleiche und die innere Schleife steuert die jeweils verglichenen Elemente.

  3. In jeder inneren Schleife können Sie ein Flag-Bit setzen, um aufzuzeichnen, ob ein Austausch stattfindet. Wenn nicht, bedeutet dies, dass das Array in Ordnung ist und Sie die innere Schleife vorzeitig verlassen können.

  4. Die Blasensortierung kann optimiert werden. Bei jedem Vergleich in der inneren Schleife kann das größte (oder kleinste) Element an das Ende (oder den Anfang) des Arrays verschoben werden, sodass in der nächsten Schleife nur die verbleibenden Elemente verglichen werden müssen.

  5. Die Blasensortierung kann mithilfe einer doppelstufigen Schleife oder rekursiv implementiert werden.

  6. Die Blasensortierung eignet sich für die Datensortierung in kleinem Maßstab. Für große Datenmengen oder zeitkritische Szenarien wird empfohlen, andere effizientere Sortieralgorithmen zu verwenden.

abschließend

且听且忘且随风,且行且看且从容

Supongo que te gusta

Origin blog.csdn.net/MrHHHHHH/article/details/135176503
Recomendado
Clasificación