Bubble Sort Algorithm
Bubble Sort Algoritmasını herhangi bir listeyi sıralamak için kullanabiliriz. Temel mantığı elemanları 2-2 şeklinde alarak kendi aralarında karşılaşmaktan geçer. N terimli bir arrayimiz var diyelim. Bu arrayi küçükten büyüğe sıralamak istediğimizi düşünelim. Bu algoritmaya göre önce 1. ve 2. elemanı karşılaştırmamız gerekiyor. Eğer 1. eleman 2. elemandan büyük ise elemanları çaprazlama yer değiştiriyoruz. Değilse olduğu gibi bırakıyoruz ve bir sonraki tura atlıyoruz. 2. ve 3. elemanı karşılaştırıyoruz. 2. eleman 3. elemandan büyük ise yine yer değiştiriyorlar. Değilse sonraki adım. Böyle son elemana kadar gidersek döngümüzün N-1 defa döneceğinin farkına varabiliriz.
Örnek Liste:
Kod:
[5,2,4,3]
5 ile 2 yi karşılaştırıyoruz. 5 sayısı 2 sayısından büyük mü? Evet büyük.. O zaman terimleri yer değiştir.. 2,5 oldu yeni arrayimiz.
Kod:
[2,5,4,3]
1. ve 2. elemanı karşılaştırdık şimdi 2. ve 3. elemanı ele alalım. 5 sayısı 4 sayısından büyük mü? Cevabımız yine evet. Yer değiştirip devam ediyoruz.
Kod:
[2,4,5,3]
3 ve 4. elemanı karşılaştırcak olursak yine 5 sayısının 3 sayısından den büyük olduğunu görüyoruz ve döngüye devam ediyoruz.
Kod:
[2,4,3,5]
Gördüğümüz üzere elemanlar bitti. Daha fazla devam edemiyoruz. Fakat döngümüz hala sırasız biçimde..
Gözle görüleceği üzere bu yaptığımız kontrol işlemini 2 defa daha yapmamız gerekiyor 4 ve 3 ün yerini değiştirmemiz için. Fakat bu her array için 1 olmak zorunda değil daha karışık bir liste verilebilirdi. O yüzden işimizi riske atıp 2 defa daha kontrol et diyemeyiz. Baştan sona N-1 adımda gelebiliyoruz. Bu sebepten dolayı bu yaptığımız döngüyü N-1 defa çalıştırmak zorundayız.
Örnek olarak Pseudo Code yazıyorum.
Kod:
for(n-1 defa dön)
for (n-1 defa dön)
if a>b: a , b = b , a
else: continue
Bu yazdığımız kod ne kadar sırasız liste verirsek verelim listeyi sıralayıp bize geri döndürecektir.
Şimdi bu kodu C diline dönüştürelim..
Kod:
#include <stdio.h>
int main()
{
int n;
printf("Sıralamak istediğiniz array kaç elemanlı :"); // [B][COLOR="Sienna"][SIZE="4"]Burada array oluşturmak için input alıyoruz[/SIZE][/COLOR][/B]
scanf("%i", &n);
int list[n];
for (int i = 0; i < n; i++){ // [B][COLOR="Sienna"][SIZE="4"]Burada dizinin tek tek elemanlarını input alıyoruz[/SIZE][/COLOR][/B]
int sayi;
printf("%i. Eleman : ",i + 1);
scanf("%i", &sayi);
list[i] = sayi;
}
for (int j = 0; j < n - 1; j++) // [B][COLOR="Sienna"][SIZE="4"]Burada dıştaki döngümüz başlıyor.[/SIZE][/COLOR][/B]
{
for (int i = 0; i < n - 1; i++) // [B][COLOR="Sienna"][SIZE="4"]Burada içteki döngümüz başlıyor.[/SIZE][/COLOR][/B]
{
if (list[i] > list[i+1]) // [B][COLOR="Sienna"][SIZE="4"]Burada arrayin 2 elemanı arasında karşılaştırma yapıyoruz.[/SIZE][/COLOR][/B]
{
int gecici = list[i+1]; // 4
list[i+1] = list[i];
list[i] = gecici;
}
else
{
continue;
}
}
}
for (int i = 0; i < n; i++) // [B][COLOR="Sienna"][SIZE="4"]Burada döngünün son halini yazıyoruz..[/SIZE][/COLOR][/B]
{
printf("%i - ", list[i]);
}
}
NOT: 2 tane for döngüsü kullanmak yerine recursive fonksiyon da kullanılabilir. Onun kodunu da yazdım merak edenler bakabilirler.
Kod:
#include <stdio.h>
int* sortOfArray(int sayac, int n, int arr[]);
int main()
{
int sayac = 0;
int n;
printf("Arr kaç elemanlı :");
scanf("%i",&n);
int arr[n];
for (int i = 0; i < n; i++)
{
printf("%i. Eleman", i+1);
scanf("%i", &arr[i]);
}
for (int i = 0; i < n; i++)
{
printf("%i ",sortOfArray(sayac,n,arr)[i]);
}
return 0;
}
int* sortOfArray(int sayac, int n, int arr[])
{
for (int i = 0; i < n - 1; i++) // 3,2,5,4 -> 2,3,5,4
{
if (arr[i] > arr[i+1])
{
int gecici = arr[i+1];
arr[i+1] = arr[i];
arr[i] = gecici;
}
}
if (sayac==n)
{
return arr;
}
return sortOfArray(sayac+1,n,arr);
}
Bubble Sort algoritmasının yanısıra bir çok sort algoritmaları mevcuttur. En hızlı çalışan sıralama algoritması Quick Sort Algorithmdir.