Array İşlemleri - Performans Analizi

📊 Temel Array İşlemleri ve Zaman Karmaşıklıkları

1. ➕ Ekleme İşlemi (Insert)

Zaman Karmaşıklığı: O(n)

Örnek Senaryo:

Başlangıç: [3, 8, 6, 7]
İşlem: 1. pozisyona 5 ekle
Sonuç: [3, 5, 8, 6, 7]

İşlem Adımları:

Adım 1: [3, 8, 6, 7, _]
         ↓
Adım 2: [3, _, 8, 6, 7]  ← Elemanları kaydır
         ↓
Adım 3: [3, 5, 8, 6, 7]  ← Yeni elemanı ekle

Neden O(n)?

  • ✓ Yeni eleman ekleme: O(1) - sabit süre
  • ✓ Sağdaki elemanları kaydırma: O(n) - n adım gerekir
  • Toplam: O(n)

2. ➖ Silme İşlemi (Delete)

Zaman Karmaşıklığı: O(n)

Örnek Senaryo:

Başlangıç: [3, 8, 6, 7]
İşlem: 1. pozisyondaki elemanı sil
Sonuç: [3, 6, 7, null]

İşlem Adımları:

Adım 1: [3, 8, 6, 7]
            ↓ sil
Adım 2: [3, _, 6, 7]
            ↓
Adım 3: [3, 6, 7, _]  ← Sağdaki elemanları sola kaydır

Neden O(n)?

  • Silinen pozisyonun sağındaki tüm elemanlar bir pozisyon sola kaydırılmalı
  • En kötü durum: İlk eleman silinirse → n-1 eleman kaydırılır

3. 🔍 Erişim İşlemi (Access)

Zaman Karmaşıklığı: O(1)

Örnek:

Array: [3, 8, 6, 7]
Erişim: mein_array[1]
Sonuç: 8

Doğrudan Erişim:

┌───┬───┬───┬───┐
│ 3 │ 8 │ 6 │ 7 │
└───┴───┴───┴───┘
  0   1   2   3   ← indeksler
      ↑
    O(1) - Anında erişim!

Neden O(1)?

  • Array’ler bellekte ardışık tutulur
  • İndeks ile doğrudan hesaplama: adres = başlangıç + (indeks × eleman_boyutu)
  • Kaydırma veya arama gerekmez

📈 Karşılaştırma Tablosu

İşlem Zaman Karmaşıklığı Açıklama
Ekleme O(n) Elemanları kaydırma gerekir
Silme O(n) Elemanları kaydırma gerekir
Erişim O(1) Doğrudan indeks erişimi
Arama O(n) Sıralı değilse tüm array taranır

💡 Önemli Notlar

⚠️ En kötü durum senaryoları:

  • Ekleme: Başa ekleme → Tüm elemanlar kaydırılır
  • Silme: Baştan silme → Tüm elemanlar kaydırılır

✅ Array’lerin avantajı:

  • Rastgele erişim çok hızlı (O(1))
  • Cache-friendly (bellekte yan yana)

❌ Array’lerin dezavantajı:

  • Ekleme/silme maliyetli (O(n))
  • Sabit boyut (dinamik değil)

🎯 Pratik İpucu

Eğer çok fazla ekleme/silme yapılacaksa: → Linked List gibi başka veri yapıları tercih edilmeli!

Eğer çok fazla okuma/erişim yapılacaksa: → Array ideal seçimdir! ✨