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".
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
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.
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
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.
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
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.
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
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.
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