0Pricing
Go Academy · Ders

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

  1. Dilimleri Sıralama
  2. Özel Sıralama Düzenleri
  3. Sıralı Verilerde Arama
  4. Kararlı Sıralama
← Go Academy Sayfasına Dön