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ırBubble 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.
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.
Aralık [0, 6], orta 3: 18 ile 24 karşılaştırılıyor.
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
- Örneği değiştirmeden önce girdi sözleşmesini ve invariantı yaz.
- Uygun olan boş, sınır, tekrar ve adversarial girdileri ekle. Basit bir oracle ile karşılaştır.
- 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 ↗