Heim Backend-Entwicklung Golang Zählsortierung

Zählsortierung

Jul 21, 2024 am 07:24 AM

Counting Sort

Hier ist ein Sortieralgorithmus, der für ein Array von Ganzzahlen oder Strukturen verwendet werden kann, die durch eine Ganzzahl verschlüsselt sind. Besonders nützlich, wenn der Bereich der Ganzzahlen in der Größenordnung der Eingabegröße liegt.

Die Hauptidee besteht darin, die Häufigkeit des Auftretens der ganzen Zahlen zu bestimmen und diese zur Bestimmung der Sortierreihenfolge zu verwenden.

Ein Beispiel: Angenommen, wir erhalten das Array {1,3,1,2}.

Bestimmen Sie zunächst den Bereich der Ganzzahlen, Max und Min, 1 und 3 für diese Eingabe.

Als nächstes erstellen Sie ein Array, nennen Sie es das Counts-Array, das die Größe des Ganzzahlbereichs+1 hat, in diesem Fall also 3 (3-1+1).
Durchlaufen Sie das Eingabearray und erhöhen Sie dabei die Anzahl der entsprechenden Einträge. Die Anzahl eines bestimmten Eingabewerts wird bei counts[value - min] platziert. Für die gegebene Eingabe speichert counts[0] die Anzahl für den Wert 1.

Dies ergibt das Counts-Array: {2,1,1}

Bestimmen Sie nun die kumulativen Zählungen, die im Wesentlichen counts[i] = counts[i-1]+counts[i] sind.

Dies ergibt das kumulative Zählungsarray: {2,3,4}

Erstellen Sie ein Ausgabearray für die sortierte Eingabe.

Jetzt durchlaufen Sie die Eingabe in umgekehrter Reihenfolge.

Rufen Sie bei jedem Schritt die kumulative Anzahl für den Wert im Eingabearray ab. Der Wert wird am Index des Ausgabearrays platziert, der der abgerufenen Anzahl entspricht – 1. Anschließend wird der kumulative Zählwert dekrementiert.

Im ersten Schritt wird der Wert 2 abgerufen und eine kumulative Zählung von 3. Der Wert sollte am Index 2 (3-1) in der Ausgabe platziert werden.

In der nächsten Iteration beträgt der Wert 1 und die kumulative Anzahl 2; also wird diese „1“ an Index 1 (2-1) der Ausgabe platziert.

Weiterhin der Wert 3 und die kumulative Zählung 4; Platzieren Sie es an Index 3 der Ausgabe.

Schließlich der Wert 1 zum zweiten Mal und eine kumulative Zählung von 1 (da die Zählung beim ersten Mal dekrementiert wurde); also wird diese „1“ an Index 0 der Ausgabe platziert.

, Sehen Sie, wie die umgekehrte Iteration die Reihenfolge gleicher Elemente beibehält und die Sortierung „stabil“ macht

Das resultierende sortierte Array ist {1,1,2,3}

func CountingSort(in []int) []int {
    // find the min/max values
    min := slices.Min(in)
    max := slices.Max(in)
    // create the count array
    counts := make([]int, max-min+1)
    for _, v := range in {
        counts[v-min]++
    }
    // determine cumulative counts
    for i := 1; i < len(counts); i++ {
        counts[i] = counts[i-1] + counts[i]
    }
    // create the output array
    out := make([]int, len(in))
    for i := range in {
        v := in[len(in)-1-i]
        out[counts[v-min]-1] = v
        counts[v-min]--
    }
    return out
}
Nach dem Login kopieren

Kann es effizienter gemacht werden? Hinterlassen Sie unten Ihre Kommentare und Vorschläge.

Danke!

Den Code für diesen Beitrag und alle Beiträge dieser Reihe finden Sie hier

Das obige ist der detaillierte Inhalt vonZählsortierung. 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 Artikel -Tags

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)

GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich? GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich? Mar 03, 2025 pm 05:17 PM

GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich?

Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren? Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren? Mar 03, 2025 pm 05:22 PM

Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren?

Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go? Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go? Mar 10, 2025 pm 05:38 PM

Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go?

Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen? Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen? Mar 10, 2025 pm 05:36 PM

Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen?

Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren? Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren? Mar 10, 2025 pm 03:20 PM

Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren?

Wie schreibe ich Dateien in Go Language bequem? Wie schreibe ich Dateien in Go Language bequem? Mar 03, 2025 pm 05:15 PM

Wie schreibe ich Dateien in Go Language bequem?

Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache? Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache? Mar 03, 2025 pm 05:18 PM

Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache?

Wie schreibe ich Benchmarks, die die reale Leistung in Go genau widerspiegeln? Wie schreibe ich Benchmarks, die die reale Leistung in Go genau widerspiegeln? Mar 10, 2025 pm 05:36 PM

Wie schreibe ich Benchmarks, die die reale Leistung in Go genau widerspiegeln?

See all articles