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.SliceStablefür Slicessort.Stablefür Typen, diesort.Interfaceimplementieren- 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.