Bubble sort algoritmasını tek döngüyle yazmak
Bubble sort mantığını tek döngülü bir örnek üzerinden anlatır; performans beklentisini ve gerçek projelerde neden standart sıralamanın tercih edildiğini açıklar.
Bubble sort, bir diziyi komşu elemanları karşılaştırıp yer değiştirerek sıralar. Klasik yazımı iç içe iki döngü kullanır. Aşağıdaki örnek aynı işi tek döngüyle yapar: takas gerçekleştiğinde sayaç geri alınır, böylece dizi üzerinde gerektiği kadar geri dönülür.
Bu yazım daha kısa görünür ama daha hızlı değildir: yapılan karşılaştırma sayısı değişmez, en kötü durumda eleman sayısının karesiyle orantılı kalır. Kazanç okunabilirlikte ve kodun yer kaplamasında.
Gerçek işlerde bubble sort tercih edilmez; her dilin standart kütüphanesindeki sıralama işlevi hem daha hızlıdır hem de sınanmıştır. Bu örneğin değeri öğretici olmasında: döngü sayacını değiştirerek algoritmanın akışını yönlendirmenin nasıl çalıştığını gösterir.
int[] arr = { 16, 12, 24, 21, 13, 9, 17, 8, 2, 14, 30, 26, 4, 19, 10, 15, 3, 27, 1, 22, 11, 6, 5, 18, 28, 7, 29, 20, 25, 23 };
int n = arr.Length;
int temp = 0;
for (int i = 0; i < n - 1; i++)
{
if (arr[i] > arr[i + 1])
{
temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
i-=2;
i = ((i < -1) ? -1 : i);
}
}
var arr = [16, 12, 24, 21, 13, 9, 17, 8, 2, 14, 30, 26, 4, 19, 10, 15, 3, 27, 1, 22, 11, 6, 5, 18, 28, 7, 29, 20, 25, 23];
var n = arr.length;
var temp = 0;
for (var i = 0; i < n - 1; i++)
{
if (arr[i] > arr[i + 1])
{
temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
i-=2;
}
}
arr = [16, 12, 24, 21, 13, 9, 17, 8, 2, 14, 30, 26, 4, 19, 10, 15, 3, 27, 1, 22, 11, 6, 5, 18, 28, 7, 29, 20, 25, 23]
n = len(arr)
i = 0
while i < n - 1:
if arr[i] > arr[i + 1]:
arr[i], arr[i + 1] = arr[i+1], arr[i]
i -= 2
i = -1 if i < -1 else i
i += 1
Kısa rehber
Ne zaman kullanılır?
Bubble sort gerçek projelerde çoğu zaman tercih edilen algoritma değildir; ama döngü mantığını, karşılaştırmayı ve yer değiştirmeyi anlatmak için iyi bir örnektir. Eğitim, deneme ve küçük listeler üzerinde mantığı görmek için kullanılabilir.
Dikkat edilecekler
- Büyük listelerde bu algoritmayı kullanmayın; performansı hızla düşer.
- Sıralama yönünü ve karşılaştırma koşulunu açık yazın.
- Gerçek uygulamada dilin hazır sıralama fonksiyonları genellikle daha güvenli ve hızlıdır.
Sık yapılan hata
Öğretici bir algoritmayı üretim koduna taşımak sık yapılan hatadır. Mantığı anlamak için güzel olabilir ama büyük veriyle çalışan uygulamalarda farklı yöntem gerekir.
Bu örnek nerede işe yarar?
Bu tür küçük yardımcı kodlar web yazılımı, mobil uygulama arka uçları, yönetim panelleri ve API projelerinde zaman kazandırır. Önemli olan örneği olduğu gibi kopyalamak değil, veri formatı, güvenlik ve performans beklentisine göre projeye uyarlamaktır.