0Pricing
Go Academy · Lektion

Stabiles Sortieren

Die Reihenfolge gleicher Elemente beibehalten

Stabiles Sortieren ist eine kostenlose Go Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Go Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist stabiles Sortieren

Eine stabile Sortierung bewahrt die ursprüngliche relative Reihenfolge gleicher Elemente. Wenn zwei Datensätze als gleich gelten, bleibt derjenige, der zuerst kam, an erster Stelle.

Warum das wichtig ist

Stabilität ist wichtig, wenn Sie nach einem Feld sortieren, aber bei Gleichständen eine vorherige Reihenfolge beibehalten möchten. Sortieren Sie zum Beispiel nach Stadt und bewahren Sie innerhalb jeder Stadt die alphabetische Reihenfolge der Personen.

sort.Slice ist nicht stabil

Das normale sort.Slice garantiert keine Stabilität. Gleiche Elemente können neu angeordnet werden. Verwenden Sie für garantierte Stabilität sort.SliceStable.

sort.SliceStable

sort.SliceStable hat dieselbe Signatur wie sort.Slice, bewahrt aber die Reihenfolge gleicher Elemente.

package main

import (
	"fmt"
	"sort"
)

func main() {
	nums := []int{3, 1, 2, 1}
	sort.SliceStable(nums, func(i, j int) bool {
		return nums[i] < nums[j]
	})
	fmt.Println(nums)
}

Stabilität mit Structs veranschaulichen

Sortieren Sie Personen nach Alter. Bei einer stabilen Sortierung behalten Personen mit gleichem Alter ihre Reihenfolge in den Eingabedaten bei.

package main

import (
	"fmt"
	"sort"
)

type Person struct {
	Name string
	Age  int
}

func main() {
	p := []Person{{"Ann", 30}, {"Bob", 25}, {"Cara", 30}}
	sort.SliceStable(p, func(i, j int) bool {
		return p[i].Age < p[j].Age
	})
	fmt.Println(p)
}

Ann vor Cara

Im vorherigen Beispiel sind Ann und Cara beide 30 Jahre alt. Da Ann in den Eingabedaten zuerst vorkam, hält eine stabile Sortierung Ann im Ergebnis vor Cara.

Sortieren in mehreren Durchläufen

Stabilität ermöglicht das Sortieren in mehreren Durchläufen. Sortieren Sie zuerst nach dem am wenigsten wichtigen Schlüssel und danach nach dem wichtigsten. Jeder stabile Durchlauf bewahrt bei Gleichständen die vorherige Reihenfolge.

package main

import (
	"fmt"
	"sort"
)

type Rec struct {
	City string
	Name string
}

func main() {
	r := []Rec{{"Rome", "Zoe"}, {"Oslo", "Ann"}, {"Rome", "Ann"}}
	sort.SliceStable(r, func(i, j int) bool { return r[i].Name < r[j].Name })
	sort.SliceStable(r, func(i, j int) bool { return r[i].City < r[j].City })
	fmt.Println(r)
}

sort.Stable

Für Typen, die sort.Interface implementieren, verwenden Sie sort.Stable statt sort.Sort, um Stabilität zu erhalten.

package main

import (
	"fmt"
	"sort"
)

type ByLen []string

func (s ByLen) Len() int           { return len(s) }
func (s ByLen) Less(i, j int) bool { return len(s[i]) < len(s[j]) }
func (s ByLen) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }

func main() {
	w := []string{"bb", "cc", "a"}
	sort.Stable(ByLen(w))
	fmt.Println(w)
}

Kosten der Stabilität

Stabile Sortierungen benötigen möglicherweise etwas mehr Speicher oder Zeit als instabile. Wenn Sie die Reihenfolge gleicher Elemente nicht bewahren müssen, ist einfaches sort.Slice ausreichend.

Wann stabile Sortierung wählen

Wählen Sie eine stabile Sortierung, wenn:

  • die Elemente eine bedeutungsvolle ursprüngliche Reihenfolge haben
  • Sie in mehreren Durchläufen nach verschiedenen Schlüsseln sortieren
  • gleiche Elemente nicht ihre Reihenfolge ändern dürfen

Beispiel für eine stabile Sortierung

Zwei Elemente mit gleichen Sortierschlüsseln erscheinen in der Eingabereihenfolge A und dann B. Eine stabile Sortierung garantiert, dass die Ausgabe A vor B beibehält.

package main

import (
	"fmt"
	"sort"
)

func main() {
	type T struct{ Key, Tag int }
	ts := []T{{1, 100}, {1, 200}, {0, 300}}
	sort.SliceStable(ts, func(i, j int) bool { return ts[i].Key < ts[j].Key })
	fmt.Println(ts)
}

Kurztest

Sie sortieren Datensätze nach Stadt mit sort.SliceStable. Zwei Datensätze haben dieselbe Stadt. Was ist garantiert?

Zusammenfassung

Eine stabile Sortierung bewahrt die Reihenfolge gleicher Elemente:

  • sort.SliceStable für Slices
  • sort.Stable für Typen, die sort.Interface implementieren
  • Ermöglicht das Sortieren in mehreren Durchläufen nach verschiedenen Schlüsseln

Häufig gestellte Fragen

Ist die Lektion „Stabiles Sortieren“ kostenlos?

Ja — der vollständige Text von „Stabiles Sortieren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Go Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Stabiles Sortieren“?

Die Reihenfolge gleicher Elemente beibehalten Du übst Go Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Go Academy zu starten?

Keine Vorkenntnisse erforderlich. Go Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Stabiles Sortieren“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Go Academy-Lektion Code schreiben und ausführen?

Ja. Jede Go Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Slices sortieren
  2. Benutzerdefinierte Sortierreihenfolgen
  3. Sortierte Daten durchsuchen
  4. Stabiles Sortieren
← Zurück zu Go Academy