COMPUTER ENGINEER

← BlogDATA STRUCTURES / ALGORITHMSPython örnek paketi ↓

Arama ve sıralama · 13 / 53

Bubble, selection ve insertion sort

Anla → iz sür → uygula → gerekçelendir

2 dk okuma · uygulama için ayrıca zaman ayır

Bubble sort komşu terslikleri swap ederek büyük öğeyi sona taşır. Bir turda swap olmadıysa bitirme kontrolü sıralı girdiyi doğrusal yapar. Selection sort kalan en küçüğü seçip başa koyar; karşılaştırma sayısı girdi sıralı olsa da kareseldir. Insertion sort öğeyi sıralı prefix'e doğru yere yerleştirir; az inversiyonlu veride etkilidir.

Stability, eşit anahtarlı kayıtların eski göreli sırasının korunmasıdır. Insertion'da yalnız büyük elemanları kaydırırsan stabil kalır; eşitleri de kaydırmak sırayı bozabilir. Selection'ın standart uzak swap uygulaması stabil değildir. In-place sözü çoğu zaman O(1) yardımcı alanı anlatır; recursive stack'i ayrıca say.

Bu yöntemler yalnız oyuncak değildir: küçük parçaları insertion ile bitiren hibrit sıralamalar vardır. Ama milyon kayıt için karesel algoritmayı “kodu kısa” diye seçme. Aynı veride comparator tutarsızsa hiçbir sıralama sözleşmesi kurtarmaz; total order, NaN ve locale karşılaştırması ayrı mühendislik kararlarıdır.

Adım adım iz sürme

[4,2,3]: insertion önce2 için4'+'’ü kaydırır →[2,4,3]; sonra3 için4'+'’ü kaydırır →[2,3,4]. Prefix her tur sıralıdır.

Maliyet ve varsayımlar

Bubble/selection/insertion worst Θ(n²). Insertion best Θ(n); yardımcı alan O(1). Selection Θ(n) swap yapar.

Çalıştırılabilir örnek

Python 3 ile çalıştır. Assert küçük bir örneği denetler; genel doğruluk ispatı değildir. Bazı ileri örnekler özellikle küçük model veya referans oracle'dır; tam üretim uygulaması değildir.

Python 3
def insertion_sort(a):
    a = list(a)
    for i in range(1, len(a)):
        x, j = a[i], i-1
        while j >= 0 and a[j] > x:
            a[j+1] = a[j]
            j -= 1
        a[j+1] = x
    return a
assert insertion_sort([4,2,3]) == [2,3,4]

İNTERAKTİF LABORATUVAR

Her kararı gör.

Gerçek algoritmayı adım adım incele. İkili arama için girdi önce sıralanır; vurgulanan indeksler sıralı diziye aittir.

30
71
112
183
244
305
426

Aralık [0, 6], orta 3: 18 ile 24 karşılaştırılıyor.

1 / 4

KAVRADIĞINI KONTROL ET

Sıra sende

Kod neden orijinal listeyi değiştirmiyor; bu durumda alan O(1) mi?

Çözümün mantığını göster

list(a) kopyası nedeniyle O(n) alan kullanır. Algoritmanın in-place varyantı O(1) ek alanlıdır; sunulan kopyalı uygulamayla karıştırma.

Bir adım ileri

  1. Örneği değiştirmeden önce girdi sözleşmesini ve invariantı yaz.
  2. Uygun olan boş, sınır, tekrar ve adversarial girdileri ekle. Basit bir oracle ile karşılaştır.
  3. Belirtilen modelde maliyeti çıkar; farklı girdi büyüklüklerini ölç ve farkları gerekçelendir.

Temel kaynaklar ve ders notları

Bu eğitimde özgün anlatım kullanıldı; aşağıdaki kaynaklar ispatlar ve ileri okumalar sunar. Bağlantılar daha geniş ders modülünü kapsayabilir.

Princeton · Algorithms, Sedgewick & Wayne ↗
İlerlemeden önce alıştırmayı çöz.