En temel sıralama algoritmalarından olan Bubble Sort (Kabarcık Sıralama) mantığını inceleyelim. Temel olarak ardışık iki eleman arasında karşılaştırma yaparak ilerler. Örneğin küçükten büyüğe sıralanacak olan bir sayı dizisinde şayet ilk eleman ikinciden büyük ise, bu iki sayı kendi arasında yer değiştirir. Daha sonra karşılaştırma bir sonraki sayı ile devam eder. Büyük dizilerde yavaş çalışması nedeniyle öncelikli tercih edilmez. Kabarcık sıralama algoritması programlanırken karşılaştırılan iki sayı için yer değiştirme durumunda kullanılacak olan swap fonksiyonu için yeri değişecek sayıyı bir geçici değişkene atamamız gerekmektedir. Aksi taktirde bu sayı değerini bellekte kaybetme durumu söz konusu olacaktır. Örnek bir sıralama yapacak olursak dizinin ilk hali 1 3 2 4 5 6 8 7 olarak verilsin.
Sıralı olarak gelen bir sayı dizisinde bile her iki elemanı kontrol ederek sona kadar gideceği için en iyi durum da BigO değeri O(n), en kötü durum için ise BigO değeri O(n^2) olacaktır.
Bubble Sort Algoritması Kaba Kod Gösterimi:
kabarcik(int A[], int N){ | |
int temp, i, j; | |
for(i=0; i<N-1 < i++){ | |
for(j=0; j<N-1-i<j++) | |
if (A[j] > A[j+ 1]={ | |
temp = A[j]; | |
D[j] = D[j+1]; | |
D[j+1] = temp; | |
} | |
} | |
} |
Algoritmanın örnek c kodu aşağıda verilmiştir.
//Versiyon 1.0 | |
#include <stdio.h> | |
void diziyiYazdir(int dizi[], int boyut){ | |
for(int i = 0; i < boyut; i++){ | |
printf("%d ", dizi[i]); | |
} | |
} | |
void bubbleSort(int dizi[], int adet_mutlak){ | |
int temp = 0; | |
for(int i = 0; i < adet_mutlak-1; i++){ | |
diziyiYazdir(dizi,adet_mutlak); | |
printf("\n"); | |
for(int j = 0; j < adet_mutlak-i-1; j++){ | |
if(dizi[j] > dizi[j+1]){ | |
temp = dizi [j]; | |
dizi[j] =dizi[j+1]; | |
dizi[j+1] = temp; | |
} | |
} | |
} | |
} | |
int main(){ | |
int sayilar, adet; | |
printf("--Bubble Sort\n"); | |
printf("----Dizinin boyutunu girin: "); | |
scanf("%d",&adet); | |
//FIXME -5 tane sayı olamaz, mantık hatası | |
int adet_mutlak = fabs(adet); | |
int dizi[adet_mutlak]; | |
for(int i = 0; i < adet_mutlak; i++){ | |
printf("%d. sayiyi giriniz: ", i+1); | |
scanf("%d", &sayilar); | |
dizi[i] = sayilar; | |
} | |
bubbleSort(dizi, adet_mutlak); | |
printf("\n>> Siralanmis Hali: "); | |
diziyiYazdir(dizi, adet_mutlak); | |
} |

Makale çok yararlı olmuş teşekkürler.
Teşekkürler Meriç 🙂