Algoritma Eğitim Aracı

Sıralama
Algoritmaları

Nasıl çalıştığını öğren, sonra kendi kendine dene. İki farklı modla hem anla hem pratik yap.

🎯

Pratik Modu

Rastgele bir dizi al, seçtiğin algoritmayı uygula, adımlarını gir — doğruluğunu kontrol et.

📖

Öğrenme Modu

Her algoritmayı adım adım görsel simülasyon ve açıklamalarla kavra.

1
2
3
4
Adım 1 — Algoritma Seç
Adım 2 — Dizini İncele

Bu dizi ile sıralanacak. Dizini iyi incele.

Adım 3 — Algoritmayı Uygula

Adım 4 — Sonuç
AdımSenin CevabınDoğru CevapDurum
Sıralama Algoritması

Bubble Sort

Komşu elemanları ikili karşılaştırır; sıra yanlışsa yerlerini değiştirir. Her turda en büyük eleman sona "kabarır".

En İyi
O(n)
Ortalama
O(n²)
En Kötü
O(n²)
Bellek
O(1)
Adım 0
Algoritmayı izlemek için ▶ Oynat'a basın.
Normal
Karşılaştırılıyor
Takas
Sıralı

Nasıl Çalışır?

  • Dizi başından başla. İlk iki komşu elemanı karşılaştır.

  • Soldaki büyükse yer değiştir. Küçük olan sola, büyük olan sağa geçer.

  • Bir sağa kay, tekrarla. Bu işlemi dizinin sonuna kadar uygula — bir "tur" tamamlanmış olur.

  • Her turda en büyük eleman sona ulaşır. Bu yüzden bir sonraki turda son elemanı kontrol etmene gerek yoktur.

  • Hiç takas olmadıysa dur. Dizi zaten sıralıdır — erken çıkış (en iyi durum O(n)).

Python Kodu

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        swapped = False
        for j in range(0, n - i - 1):
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
                swapped = True
        if not swapped:   # Erken çıkış optimizasyonu
            break
    return arr
💡Ne zaman kullanılır? Eğitim ve öğretim amaçlı idealdir. Küçük ve neredeyse sıralı dizilerde makul performans gösterir. Büyük ve karışık dizilerde tercih edilmez.
Sıralama Algoritması

Insertion Sort

Diziyi sıralı ve sırasız iki bölgeye ayırır. Sırasız bölgeden her seferinde bir eleman alıp sıralı bölgeye doğru yerine yerleştirir. İskambil kağıdı sıralamaya benzer.

En İyi
O(n)
Ortalama
O(n²)
En Kötü
O(n²)
Bellek
O(1)
Adım 0
Algoritmayı izlemek için ▶ Oynat'a basın.
Normal
Seçilen Eleman
Kaydırılıyor
Sıralı Bölge

Nasıl Çalışır?

  • İlk eleman zaten "sıralı" sayılır. İndeks 1'den başlanır.

  • Geçici elemanı al (key). Sırasız bölgenin ilk elemanı seçilir.

  • Sıralı bölgede geriye doğru tara. key'den büyük elemanlar bir sağa kaydırılır.

  • Doğru yere yerleştir. key artık yerini bulmuştur; sıralı bölge bir büyür.

  • Tüm elemanlar için tekrarla. Dizi bitince sıralama tamamlanır.

Python Kodu

def insertion_sort(arr):
    for i in range(1, len(arr)):
        key = arr[i]        # Yerleştirilecek eleman
        j = i - 1
        while j >= 0 and arr[j] > key:
            arr[j + 1] = arr[j]   # Elemanı sağa kaydır
            j -= 1
        arr[j + 1] = key          # key'i doğru yere koy
    return arr
💡Ne zaman kullanılır? Küçük dizilerde ve neredeyse sıralı verilerde çok verimlidir. Yeni gelen veriler art arda ekleniyorsa (online sorting) idealdir.
Sıralama Algoritması

Selection Sort

Her turda sırasız kısımdaki en küçük elemanı bulur ve tur başına taşır. Takas sayısı diğer algoritmalardan azdır.

En İyi
O(n²)
Ortalama
O(n²)
En Kötü
O(n²)
Bellek
O(1)
Adım 0
Algoritmayı izlemek için ▶ Oynat'a basın.
Normal
Taranan
Minimum
Sıralı

Nasıl Çalışır?

  • Sırasız kısmın tamamını tara. En küçük elemanın indeksini kaydet.

  • Minimum bulundu. Tur başındaki elemanla yer değiştir.

  • Sıralı kısım bir büyür. Bir sonraki turda dizi bir eleman daha kısa taranır.

  • Tüm turlar bitince dizi sıralıdır. Toplam n-1 takas yapılır.

Python Kodu

def selection_sort(arr):
    n = len(arr)
    for i in range(n - 1):
        min_idx = i             # Başlangıçta minimum tur başı
        for j in range(i + 1, n):
            if arr[j] < arr[min_idx]:
                min_idx = j     # Daha küçük bulundu
        if min_idx != i:
            arr[i], arr[min_idx] = arr[min_idx], arr[i]
    return arr
💡Ne zaman kullanılır? Takas maliyetinin yüksek olduğu durumlarda (yazma işleminin pahalı olduğu bellek türleri gibi) tercih edilebilir; takas sayısı sabittir O(n).
Sıralama Algoritması

Merge Sort

Böl ve Yönet (Divide & Conquer) prensibini kullanır. Diziyi ikiye böler, her parçayı ayrı ayrı sıralar, sonra sıralı parçaları birleştirir. Garantili O(n log n) karmaşıklığa sahiptir.

En İyi
O(n log n)
Ortalama
O(n log n)
En Kötü
O(n log n)
Bellek
O(n)
Adım 0
Algoritmayı izlemek için ▶ Oynat'a basın.
Normal
Bölünen
Birleştiriliyor
Sıralı

Nasıl Çalışır?

  • Ortadan böl. Dizi tek elemana inene kadar rekürsiyon ile bölünür.

  • Birleştir (Merge). İki sıralı parça, karşılaştırma yapılarak tek sıralı parça haline getirilir.

  • Yukarı doğru birleştirmeye devam et. Alt problemler çözülüp birleştirilerek tüm dizi sıralanır.

  • Her bölme seviyesi O(n) iş gerektirir. log n bölme seviyesi vardır → toplam O(n log n).

Python Kodu

def merge_sort(arr):
    if len(arr) <= 1:
        return arr
    mid = len(arr) // 2
    left  = merge_sort(arr[:mid])
    right = merge_sort(arr[mid:])
    return merge(left, right)

def merge(left, right):
    result = []
    i = j = 0
    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            result.append(left[i]); i += 1
        else:
            result.append(right[j]); j += 1
    result += left[i:] + right[j:]
    return result
💡Ne zaman kullanılır? Büyük veri setlerinde güvenilir performans gerektiren durumlarda idealdir. Bağlı liste (linked list) sıralamada tercih edilir. Dezavantajı ek O(n) bellek kullanımıdır.
Sıralama Algoritması

Quick Sort

Bir pivot eleman seçer; küçükleri sola, büyükleri sağa yerleştirir. Sonra sol ve sağ kısımlara aynı işlemi rekürsiyon ile uygular. Pratikte en hızlı genel amaçlı algoritmadır.

En İyi
O(n log n)
Ortalama
O(n log n)
En Kötü
O(n²)
Bellek
O(log n)
Adım 0
Algoritmayı izlemek için ▶ Oynat'a basın.
Normal
Pivot
Karşılaştırılıyor
Takas
Sıralı

Nasıl Çalışır?

  • Pivot seç. Genellikle son eleman pivot olarak alınır.

  • Partition (Bölümleme). Pivottan küçük elemanlar sola, büyükler sağa toplanır. Pivot kendi doğru yerine girer.

  • Sol ve sağ kısımlara rekürsiyon. Her kısım ayrı ayrı aynı işleme tabi tutulur.

  • Taban durum: Kısmın uzunluğu ≤ 1 olduğunda rekürsiyon durur.

Python Kodu

def quick_sort(arr, low=0, high=None):
    if high is None:
        high = len(arr) - 1
    if low < high:
        pi = partition(arr, low, high)
        quick_sort(arr, low, pi - 1)
        quick_sort(arr, pi + 1, high)
    return arr

def partition(arr, low, high):
    pivot = arr[high]   # Son eleman pivot
    i = low - 1         # Küçüklerin sınırı
    for j in range(low, high):
        if arr[j] <= pivot:
            i += 1
            arr[i], arr[j] = arr[j], arr[i]
    arr[i + 1], arr[high] = arr[high], arr[i + 1]
    return i + 1
💡Ne zaman kullanılır? Genel amaçlı sıralama için en hızlı seçenek. Cache-friendly yapısıyla pratikte Merge Sort'tan genellikle daha hızlıdır. Pivot seçimi çok kritiktir; zayıf pivot seçimi worst case O(n²)'ye yol açar.