Insertion Sort Algoritması

Insertion Sort Açıklaması

Insertion Sort, sıralanmış kısıma elemanları tek tek yerleştiren basit ve sezgisel bir sıralama algoritmasıdır. Bu algoritma, kart oyununda elimizdeki kartları sıralarken kullandığımız stratejiye benzer bir yaklaşım kullanır. ## Çalışma Prensibi: 1. Dizinin ilk elemanı zaten sıralı kabul edilir. 2. İkinci elemandan başlayarak, her elemanı sıralı alt dizide doğru konuma yerleştir. 3. Bu işlem için, mevcut elemanı geçici olarak sakla. 4. Sıralı kısımda elemandan büyük olan tüm elemanları bir pozisyon sağa kaydır. 5. Boşalan konuma mevcut elemanı yerleştir. 6. Dizinin tüm elemanları için 2-5 adımlarını tekrarla. ## Önemli Özellikler: 1. **Yerinde Sıralama**: Ekstra bellek kullanmadan orijinal diziyi sıralar. 2. **Kararlı Sıralama**: Eşit değere sahip elemanların göreceli sırası korunur. 3. **Uyarlanabilir**: Kısmen sıralı dizilerde daha az işlem yaparak daha verimli çalışır. 4. **Çevrimiçi Algoritma**: Giriş verilerini hepsi bir anda değil, sırayla alabilir. Insertion Sort, küçük veri setleri veya neredeyse sıralı diziler için oldukça verimlidir. Örneğin, zaten sıralı bir diziye yeni elemanlar eklerken idealdir. Ancak büyük ve rastgele düzenlenmiş dizilerde daha yavaştır.

Kod Örnekleri

Insertion Sort algoritmasının farklı programlama dillerindeki uygulamaları aşağıda verilmiştir. Her örnek, algoritmanın optimize edilmiş versiyonunu içerir ve detaylı açıklamalarla sunulmuştur.

Insertion Sort - JavaScript
1/**
2 * Insertion Sort implementation for JavaScript arrays
3 * @param {Array} arr - The array to sort
4 * @returns {Array} - A new sorted array
5 */
6function insertionSort(arr) {
7 // Create a copy to avoid modifying the original array
8 const result = [...arr];
9 const n = result.length;
10
11 // Start from the second element (index 1)
12 for (let i = 1; i < n; i++) {
13 // Store the current element to be inserted
14 const current = result[i];
15
16 // Find the position to insert the current element in the sorted subarray
17 let j = i - 1;
18 while (j >= 0 && result[j] > current) {
19 // Shift elements to the right
20 result[j + 1] = result[j];
21 j--;
22 }
23
24 // Insert the current element at the correct position
25 result[j + 1] = current;
26 }
27
28 return result;
29}

Kendi Verilerinizle Test Edin

Aşağıya kendi verilerinizi girerek Insertion Sort algoritmasını test edebilirsiniz. Virgülle ayrılmış sayılar girin (örn: 5,3,8,4,2) veya rastgele bir dizi oluşturun.

Insertion Sort Demo

Verdiğiniz dizi Insertion Sort algoritması ile sıralanacaktır.

Sıralanmış Dizi: null

Not: Insertion Sort kısmen sıralı dizilerde daha verimlidir ve küçük veri setleri için uygun bir seçimdir.

Algoritma Analizi

Zaman ve Alan Karmaşıklığı

Zaman Karmaşıklığı

  • En İyi Durum: O(n) - Dizi zaten sıralıysa, sadece karşılaştırma yapılır ve hiç yer değiştirme yapılmaz.
  • Ortalama Durum: O(n²) - Rastgele sırada olan bir dizi için, her eleman ortalama olarak yarısı kadar yer değiştirir.
  • En Kötü Durum: O(n²) - Dizi tersine sıralıysa, her eleman en başa kadar taşınmak zorundadır.

Alan Karmaşıklığı

O(1) - Insertion Sort yerinde (in-place) bir sıralama algoritmasıdır. Giriş dizisinin boyutundan bağımsız olarak sabit miktarda ekstra bellek kullanır.

Kararlılık (Stability)

Insertion Sort kararlı bir algoritmadır. Eşit değere sahip elemanların göreceli sırası korunur. Bu özellik, çoklu anahtar sıralaması gerektiren uygulamalarda önemlidir.

Avantajlar ve Dezavantajlar

Avantajlar

  • Anlaşılması ve uygulanması son derece kolaydır.
  • Ekstra bellek gerektirmez (O(1) alan karmaşıklığı).
  • Kararlı bir algoritma olduğundan, eşit değerli elemanların sırası korunur.
  • Neredeyse sıralı dizilerde, O(n) karmaşıklığa yaklaşır ve oldukça verimlidir.
  • Çevrimiçi bir algoritma olduğundan, veri aktarımı sırasında sıralama yapabilir.
  • Küçük veri setleri için basit ve verimlidir.

Dezavantajlar

  • Büyük veri setleri için O(n²) zaman karmaşıklığı nedeniyle verimsizdir.
  • Rastgele sıralanmış veya tersine sıralı dizilerde performans kaybı yaşanır.
  • Her eleman için kaydırma işlemi maliyetlidir.
  • Dizinin boyutu büyüdükçe, daha gelişmiş algoritmalardan (Quick Sort, Merge Sort vb.) önemli ölçüde daha yavaştır.

Insertion Sort Nasıl Çalışır?

Aşağıda, Insertion Sort'un [5, 2, 4, 6, 1, 3] dizisini sıralama adımları gösterilmiştir:

Adım Adım Insertion Sort

Başlangıç Dizisi:

[5, 2, 4, 6, 1, 3]

İlk eleman (5) zaten sıralanmış kabul edilir.

1. Adım: İkinci elemanı (2) ekle

2 değeri 5'ten küçük olduğu için, 5'i sağa kaydır ve 2'yi yerleştir:

[2, 5, 4, 6, 1, 3]

Sıralanmış kısım: [2, 5]

2. Adım: Üçüncü elemanı (4) ekle

4 değeri 5'ten küçük ama 2'den büyük olduğu için, 5'i sağa kaydır ve 4'ü yerleştir:

[2, 4, 5, 6, 1, 3]

Sıralanmış kısım: [2, 4, 5]

3. Adım: Dördüncü elemanı (6) ekle

6 değeri 5'ten büyük olduğu için yerinde kalır:

[2, 4, 5, 6, 1, 3]

Sıralanmış kısım: [2, 4, 5, 6]

4. Adım: Beşinci elemanı (1) ekle

1 değeri tüm önceki elemanlardan küçük olduğu için, hepsini sağa kaydır ve 1'i başa yerleştir:

[1, 2, 4, 5, 6, 3]

Sıralanmış kısım: [1, 2, 4, 5, 6]

5. Adım: Altıncı elemanı (3) ekle

3 değeri 2'den büyük ama 4'ten küçük olduğu için, 4, 5 ve 6'yı sağa kaydır ve 3'ü yerleştir:

[1, 2, 3, 4, 5, 6]

Sıralanmış kısım: [1, 2, 3, 4, 5, 6]

Sonuç: Tamamen Sıralanmış Dizi

[1, 2, 3, 4, 5, 6]

Insertion Sort ve Diğer Algoritmalar

Insertion Sort ile diğer popüler sıralama algoritmalarının karşılaştırması:

ÖzellikInsertion SortBubble SortSelection SortQuick Sort
En İyi DurumO(n)O(n)O(n²)O(n log n)
En Kötü DurumO(n²)O(n²)O(n²)O(n²)
Alan KarmaşıklığıO(1)O(1)O(1)O(log n)
KararlılıkKararlıKararlıKararsızKararsız
UyarlanabilirlikYüksekDüşükYokKısmen
ÇevrimiçiEvetHayırHayırHayır
Tercih Edilme DurumuKısmen sıralı küçük veri setleriEğitim amaçlıAz takas gerektiren durumlarGenel amaçlı büyük veri setleri

Insertion Sort, özellikle kısmen sıralı diziler için verimli bir seçimdir. Çoğu programlama dilinin dahili sıralama fonksiyonları, küçük alt dizileri sıralamak için Insertion Sort'u tercih eder. Bu yüzden hibrit algoritmalarda (Timsort gibi) sıklıkla kullanılır.

İlgili Algoritmalar

Insertion Sort ile ilişkili veya benzer algoritmalar:

Shell Sort

Insertion Sort'un geliştirilmiş versiyonu. Büyük adımlarla başlayıp giderek küçülen adımlarla sıralama yapar, böylece uzak elemanları daha hızlı hareket ettirir.

Binary Insertion Sort

Linear arama yerine binary search kullanarak elemanın doğru pozisyonunu daha hızlı bulan bir Insertion Sort varyasyonudur.

Timsort

Insertion Sort ve Merge Sort'u birleştiren bir hibrit algoritma. Python, Java ve daha birçok dilin yerleşik sıralama algoritması olarak kullanılır.

Insertion Sort

Sıralanmış bir alt listeye elemanları birer birer ekleyerek sıralama yapan bir algoritma.

Avantajlar

  • Kısmen sıralı veriler için çok verimli
  • Küçük veri setleri için basit ve etkili
  • Kararlı bir sıralama algoritması
  • Yerinde sıralama (ek bellek gerektirmez)
  • Çevrimiçi bir algoritma (veri gelirken sıralayabilir)

Dezavantajlar

  • Büyük veri setleri için O(n²) karmaşıklık nedeniyle verimsiz
  • Her eleman için kaydırma işlemi zaman alıcı olabilir
  • Rastgele sıralanmış dizilerde performans düşüktür
  • Büyük veri setlerinde Quick Sort veya Merge Sort'tan daha yavaştır