Bubble Sort (Baloncuk veya Kabarcık Sıralama) Algoritması

Selamün Aleyküm Arkadaşlar;

Bubble Sort algoritması seçilen 1. elemanın, bir sonraki elemanla karşılaştırılıp; sonra diğer elemanların, bir sonraki elemanla karşılaştırılarak devam eder. Karşılaştırılan eleman ve sonraki eleman küçük veya büyükse (sıralamaya göre) yer değiştirir. Bu döngü sona geldiğinde sıralama olmadıysa veriler sıralanana kadar baştan sona devam eder.

Bir A dizimiz olsun. Bu diziyi büyükten küçüğe doğru sıralayalım.

SnapCrab_No-0039

İlk eleman seçilip bir sonraki elemanla karşılaştırılır. Sonraki eleman küçükse yer değiştirilir. Sonra ikinci eleman seçilip sonraki eleman karşılaştırılır. Sonra üçüncü eleman seçilir bu şekilde devam eder.

SnapCrab_No-0038

Sıralama tamamlandığında döngü sonlandırılır.

SnapCrab_No-0040

Burada dikkat edilirse ilk döngüde en büyük olan sayı sona gelir.

İkinci döngüde ise sondaki sayının bir küçüğü sondan ikinci olur.

Dizi sayısına n dersek:

n, (n-1), (n-2) … şeklinde döngü tekrarlanır.

Bu algoritmayı koda dökersek eğer ilk önce eleman seçmek için bir döngü yazalım. Bir sonraki elemanla karşılaştırıldığı için döngü dizi uzunluğunun – 1 sonucuna kadar dönmelidir. Elemanları karşılaştırıp sonraki eleman, seçilen elemandan küçükse yer değiştirmelidir.

int[] a = new int[]{17, 3, 1, 5, 45}

for (int i = 0; i < a.Length - 1; i++)
{
    if (a[i + 1] < a[i]) {
        int temp = a[i];
        a[i] = a[i + 1];
        a[i + 1] = temp;
    }
}

Tabiki bu döngü bir defa dönmeyeceği için bir sonsuz döngünün içinde yazmamız gerekir. Veriler sıralanana kadar bu döngü hep tekrarlanmalıdır. Bunun için bir kontrol yazmalıyız. Yer değişmediği zaman döngüden çıkmalıdır.

int[] a = new int[]{17, 3, 1, 5, 45}

while (true) {
	bool degisti = false;

	for (int i = 0; i < a.Length - 1; i++)
	{
	    if (a[i + 1] < a[i]) {
	        int temp = a[i];
	        a[i] = a[i + 1];
	        a[i + 1] = temp;
	        degisti = true;
	    }
	}

	if (!degisti)
        break;
}

n, n-1, n-2… şeklinde kodu düzenleyelim. Bir daha sıralanmış verileri kontrol etmemesi gerekir.

int[] a = new int[]{17, 3, 1, 5, 45}
int n = a.Length;

while (true) {
	bool degisti = false;

	for (int i = 0; i < n - 1; i++)
	{
	    if (a[i + 1] < a[i]) {
	        int temp = a[i];
	        a[i] = a[i + 1];
	        a[i + 1] = temp;
	        degisti = true;
	    }
	}

	n--;

	if (!degisti)
        break;
}

Proje dosyasını buradan indirebilirsiniz.

PHP

$a = array(17, 3, 1, 5, 45);
$n = count($a);

while (true) {
	$degisti = false;

	for ($i = 0; $i < $n - 1; $i++)
	{
	    if ($a[$i + 1] < $a[$i]) {
	        $temp = $a[$i];
	        $a[$i] = $a[$i + 1];
	        $a[$i + 1] = $temp;
	        $degisti = true;
	    }
	}

	$n--;

	if (!$degisti)
        break;
}

//Ekrana sıralanmış diziyi yaz
for ($i=0; $i < count($a); $i++) { 
	echo $a[$i] . ' ';
}

 

Hayırlı günler, sağlıcakla kalın.

Bu döküman www.ibasoglu.com’a aittir. Kaynak belirtmek suretiyle alıntı yapılabilir.