
Temel algoritmalar, programlamanın yapı taşlarıdır. Bu yazıda iki temel algoritma — bubble sort (sıralama) ve binary search (arama) — ele alınacaktır. Bubble sort, ardışık elemanları karşılaştırıp gerektiğinde takas yaparak diziyi sıralarken; binary search sıralanmış dizilerde hedef elemanı hızlıca bulmak için arama alanını yarıya indirir. Tanımlar ve kısa açıklamalar için kaynaklara bakabilirsiniz: Bubble Sort — Davut Kara ve Algoritmalar İnteraktif Öğrenme Platformu (sıralama ve arama).
Bubble sort, dizideki komşu (ardışık) elemanları karşılaştırır ve doğru sırada değilse yerlerini değiştirir. Bu karşılaştırma-takas işlemi, dizinin sonuna kadar tekrarlanır; her geçiş (pass) sonunda en büyük eleman dizinin sonuna "kabarcık" gibi yükselir. Bu temel tanım için kaynak: Davut Kara - Bubble Sort ve adım adım açıklamalar için örnek rehberler mevcuttur.
Başlangıç dizisi: [5, 2, 1, 4, 3]
Python örneği:
def bubble_sort(a):
n = len(a)
for i in range(n):
swapped = False
for j in range(0, n - i - 1):
if a[j] > a[j+1]:
a[j], a[j+1] = a[j+1], a[j]
swapped = True
if not swapped:
break
return a
Genel olarak bubble sort'un zaman karmaşıklığı ortalama ve kötü durumda O(n^2)'dir; en iyi durumda (dizi zaten sıralı ve erken çıkış kullanılıyorsa) O(n) olabilir. Bellek kullanımı (mekan karmaşıklığı) sabittir, O(1), çünkü sıralama yerinde gerçekleştirilir. Bu tip karmaşıklık değerlendirmeleri ve karşılaştırmalar için kaynak: Algopit - Sıralama Algoritmaları.
Binary search, yalnızca sıralanmış dizilerde (veya sıralanmış veri yapılarına erişimde) doğru çalışır. Ortadaki elemanla hedef karşılaştırılır; hedef daha küçükse sağ yarı atlanır, daha büyükse sol yarı atlanır; arama alanı yarıya indirilir. Bu çalışma şekli ve faydaları hakkında genel referans: Algopit - Arama ve Sıralama.
Python (iteratif):
def binary_search(a, target):
low, high = 0, len(a) - 1
while low <= high:
mid = (low + high) // 2
if a[mid] == target:
return mid # bulundu — indeks döner
elif a[mid] < target:
low = mid + 1
else:
high = mid - 1
return -1 # bulunamadı
Python (rekürsif):
def binary_search_recursive(a, target, low, high):
if low > high:
return -1
mid = (low + high) // 2
if a[mid] == target:
return mid
elif a[mid] < target:
return binary_search_recursive(a, target, mid + 1, high)
else:
return binary_search_recursive(a, target, low, mid - 1)
Binary search'un zaman karmaşıklığı O(log n) olarak bilinir; arama alanı her adımda yarıya indirildiği için boyut logaritmik şekilde azalır. Mekan karmaşıklığı iteratif sürüm için O(1), rekürsif sürüm için çağrı yığını nedeniyle O(log n) seviyesinde olabilir. Bu karmaşıklık bilgileri için kaynak: Algopit.
Önemli not: Bubble sort bir sıralama algoritmasıdır; binary search ise bir arama algoritmasıdır. Bu yüzden doğrudan "hangisi daha iyi?" sorusu anlamsız olabilir. Karşılaştırma yapılacaksa amaç ve bağlam düşünülmelidir:
Bubble sort ve binary search, programlama öğreniminin ilk adımlarında sık karşılaşılan iki temel kavramdır. Bubble sort sıralama mantığını basitçe gösterir; binary search ise sıralanmış verilerde verimli arama yapmanın örneğidir. Karmaşıklık analizleri ve kullanım önerileri için rehber kaynaklar: Davut Kara - Bubble Sort ve Algopit. Başlangıç seviyesindeyseniz, hem kodu elle çalıştırarak adımları takip etmek hem de küçük testler yazarak doğruluğu kontrol etmek öğrenmeyi hızlandırır.
Kaynaklar: Davut Kara (Bubble Sort) ve Algopit (Sıralama ve Arama algoritmaları) referans alınmıştır.
Yorumlar