Menu
Coddy logo textTech

Selection Sort

Son güncelleme

Selection sort diziyi solda sıralı bir bölge ve sağda sırasız bir bölge olarak ikiye ayırır. Her geçişte sırasız bölgeyi tarayarak en küçük elemanı bulur, ardından onu ilk sırasız konuma takas eder ve sıralı bölgeyi bir artırır. Tarama ve takası izlemek için yukarıdan oynat'a basın veya karşılaştırma karşılaştırma ilerleyin.

Selection sort girdiden bağımsız olarak her zaman aynı sayıda karşılaştırma yapar, ancak en fazla n-1 takas gerçekleştirir - bubble sort'tan çok daha az - ki bu yazmalar pahalı olduğunda önem taşır.

Zaman ve alan karmaşıklığı

DurumKarmaşıklıkNotlar
En iyi durumO(n²)Dizi sıralı olsa bile karşılaştırmalar yapılır
Ortalama durumO(n²)Rastgele sıra
En kötü durumO(n²)Ters sıralı
AlanO(1)Yerinde
KararlıHayırTakaslar eşit elemanların sırasını değiştirebilir

Adım adım

AdımNe olur
1Tüm diziyi sırasız olarak kabul et.
2Minimum elemanı bulmak için sırasız bölgeyi tara.
3Bu minimumu ilk sırasız konuma takas et.
4Sınırı bir adım sağa taşı (o konum artık sıralı).
5Yalnızca bir eleman sırasız kalana kadar tekrarla.

Çözümlü örnek

[5, 2, 4, 1] sıralanıyor:

GeçişDiziİşlem
Başlangıç[5, 2, 4, 1]Tüm dizi sırasız.
1[1, 2, 4, 5][5, 2, 4, 1] taranır, minimum indeks 3'teki 1; indeks 0 ile takas edilir.
2[1, 2, 4, 5][2, 4, 5] taranır, minimum zaten indeks 1'deki 2; kendisiyle takas edilir.
3[1, 2, 4, 5][4, 5] taranır, minimum zaten indeks 2'deki 4; hareket gerekmez.
Bitti[1, 2, 4, 5]Geriye yalnızca 5 kaldı, yani zaten yerinde.

Selection sort ne zaman kullanılır

Şu durumda kullanŞu durumda kaçın
Yazmalar pahalıysa - en fazla n-1 takas yapar.Dizi büyükse - O(n²) karşılaştırmalar baskındır.
Basit, kolay uygulanan yerinde bir sıralamaya ihtiyacın varsa.Eşit anahtarların sırasını koruyan kararlı bir sıralamaya ihtiyacın varsa.
Bellek kısıtlıysa - yalnızca O(1) ek alan kullanır.Veri neredeyse sıralıysa - insertion sort gibi erken bitiremez.
Veri kümesi çok küçükse ve öngörülebilir performans önemliyse.İşlem hacmi önemliyse - quicksort gibi O(n log n) sıralamalar çok daha hızlıdır.

Selection Sort kodu

Python, JavaScript, Java, C++, C dillerinde temiz ve çalıştırılabilir bir Selection Sort uygulaması. Bir dil seçin, kodu kopyalayın veya Coddy Playground'da hazır yüklenmiş olarak açın.

Python ile Selection Sort kodu

Python
1def selection_sort(a):2    n = len(a)3    for i in range(n - 1):4        # Find the smallest element in the unsorted tail5        min_idx = i6        for j in range(i + 1, n):7            if a[j] < a[min_idx]:8                min_idx = j9        a[i], a[min_idx] = a[min_idx], a[i]10    return a11
12
13nums = [64, 25, 12, 22, 11]14print("Before:", nums)15selection_sort(nums)16print("After: ", nums)
Bu kodu Python Playground'da çalıştır

Selection Sort SSS

Selection sort'un zaman karmaşıklığı nedir?
Selection sort tüm durumlarda - en iyi, ortalama ve en kötü - O(n²)'dir, çünkü her minimumu bulmak için sırasız bölgenin tamamını her zaman tarar. O(1) ek alan kullanır.
Selection sort kararlı mıdır?
Standart yerinde sürüm kararlı değildir, çünkü uzaktaki bir minimumu yerine takas etmek eşit bir elemanı bir diğerinin önüne taşıyabilir. Kararlı bir varyant vardır, ancak takas yerine kaydırma gerektirir.
Selection sort ne zaman yararlıdır?
Belleğe yazma maliyeti yüksek olduğunda yararlıdır, çünkü en fazla n-1 takas gerçekleştirir - eleman taşıyan bir karşılaştırmalı sıralama için mümkün olan en az sayı.
Selection sort ile bubble sort arasındaki fark nedir?
İkisi de O(n²) karşılaştırmalı sıralamadır, ancak selection sort en fazla n-1 takas yaparken bubble sort O(n²)'ye kadar takas yapabilir. Bubble sort ayrıca zaten sıralı bir diziyi algılayıp erken durabilir, oysa selection sort her zaman tüm geçişleri çalıştırır.
Selection sort mu yoksa insertion sort mu kullanmalıyım?
Çoğu durumda insertion sort'u tercih et - kararlıdır, neredeyse sıralı veride O(n) çalışır ve ortalamada daha hızlıdır. Selection sort'u yalnızca yazma sayısını en aza indirmek öncelikliyse seç, çünkü en fazla n-1 takası garanti eder.
Selection sort neden sıralı bir dizide bile her zaman O(n²)'de çalışır?
Selection sort bir elemanın zaten minimum olduğunu, sırasız bölgenin geri kalanını taramadan bilemez, bu yüzden girdi sırasından bağımsız olarak her geçişte tüm karşılaştırmaları yapar. Bu nedenle en iyi durum O(n²)'de en kötü duruma eşittir - erken kesilebilen insertion veya bubble sort'un aksine.
Coddy programming languages illustration

Coddy ile algoritmalarda ustalaş

BAŞLA