Kararlı Sıralama
Eşit ögelerin sırasını koruyun
Kararlı Sıralama, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.
Kararlı Sıralama Nedir
Kararlı bir sıralama, eşit öğelerin özgün göreli sırasını korur. İki kayıt eşit karşılaştırılırsa, önce gelen ilk sırada kalır.
Neden Önemlidir
Bir alana göre sıralama yaparken eşitlik durumlarında önceki düzeni korumak istediğinizde kararlılık önemlidir. Örneğin şehre göre sıralama yaparken her şehirdeki kişileri alfabetik sırada tutabilirsiniz.
sort.Slice Kararlı Değildir
Normal sort.Slice, kararlılığı garanti etmez. Eşit öğelerin sırası değişebilir. Garanti edilen kararlılık için sort.SliceStable kullanın.
sort.SliceStable
sort.SliceStable, sort.Slice ile aynı imzaya sahiptir; ancak eşit öğelerin sırasını korur.
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)
}Yapılarla Kararlılığı Görme
Kişileri yaşa göre sıralayın. Kararlı bir sıralamada, yaşı eşit olan kişiler girdi sıralarını korur.
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 Cara'dan Önce
Önceki örnekte Ann ve Cara'nın ikisi de 30 yaşındadır. Ann girdide önce yer aldığı için kararlı sıralama, sonuçta Ann'i Cara'dan önce tutar.
Birden Çok Geçişle Sıralama
Kararlılık, sıralamayı birden çok geçişte yapmanızı sağlar. Önce en az önemli anahtara, ardından en önemli anahtara göre sıralayın. Her kararlı geçiş, eşitlik durumlarında önceki sırayı korur.
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
sort.Interface uygulayan türlerde, kararlılık elde etmek için sort.Sort yerine sort.Stable kullanın.
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)
}Kararlılığın Maliyeti
Kararlı sıralamalar, kararlı olmayanlara göre biraz daha fazla bellek veya zaman kullanabilir. Eşit öğelerin sırasını korumanız gerekmiyorsa normal sort.Slice yeterlidir.
Kararlı Sıralama Ne Zaman Seçilmeli
Kararlı sıralamayı şu durumlarda seçiniz:
- Öğelerin özgün sırası anlam taşıyorsa
- Farklı anahtarlara göre birden çok geçişte sıralama yapıyorsanız
- Eşit öğelerin yerleri değiştirilmemeliyse
Kararlı Sıralama Denetimi Örneği
Eşit sıralama anahtarlarına sahip iki öğe, giriş sırasına göre önce A, sonra B olarak görünür. Kararlı bir sıralama, çıktıda A'nın B'den önce kalmasını garanti eder.
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)
}Hızlı Denetim
Kayıtları sort.SliceStable kullanarak şehre göre sıralıyorsunuz. İki kayıt aynı şehre sahip. Ne garanti edilir?
Özet
Kararlı sıralama, eşit öğelerin sırasını korur:
- Dilimler için
sort.SliceStable - sort.Interface türleri için
sort.Stable - Farklı anahtarlara göre birden çok geçişli sıralamayı mümkün kılar
Sıkça Sorulan Sorular
“Kararlı Sıralama” dersi ücretsiz mi?
Evet — “Kararlı Sıralama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.
“Kararlı Sıralama” dersinde ne öğreneceğim?
Eşit ögelerin sırasını koruyun Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Go Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Kararlı Sıralama” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Dilimleri Sıralama
- Özel Sıralama Düzenleri
- Sıralı Verilerde Arama
- Kararlı Sıralama