Bilgisayarda bir sayı dizisini küçükten büyüğe veya büyükten küçüğe sıralamanın birçok yöntemi vardır. Bu işlemi yapan en basit algoritma kabarcık sıralama (bubble sort) algoritmasıdır. Bu algoritma, sayı dizisinin başından başlar ve sırayla dizi elemanlarını seçer. Seçilen eleman kendinden sonraki eleman ile karşılaştırılır ve daha büyükse onunla yer değiştirilir. Bu işlem dizinin son elemanı seçilene kadar sürdürülür ve sonunda dizi sıralanmış olur.
Örneğin sıralanacak olan dizi 21, 9, 14, 7, 36 olsun. Küçükten büyüğe sıralama işleminde:
1. iterasyon: 0 ve 1 indeksli elemanlar yani 21 ve 9 karşılaştırılır ve 0 indeksli eleman 1 indeksli elemandan büyük olduğu için yer değiştirme yapılır. Bu durumda dizinin yeni hâli: 9, 21, 14, 7, 36 olur.
2. iterasyon: 1 ve 2 indeksli elemanlar yani 21 ve 14 karşılaştırılır ve 1 indeksli eleman 2 indeksli elemandan büyük olduğu için yer değiştirme yapılır. Bu durumda dizinin yeni hâli: 9, 14, 21, 7, 36 olur.
3. iterasyon: 2 ve 3 indeksli elemanlar yani 21 ve 7 karşılaştırılır ve 2 indeksli eleman 3 indeksli elemandan büyük olduğu için yer değiştirme yapılır. Bu durumda dizinin yeni hâli: 9, 14, 7, 21, 36 olur.
4. iterasyon: 3 ve 4 indeksli elemanlar yani 21 ve 36 karşılaştırılır ve 3 indeksli eleman 4 indeksli elemandan küçük olduğu için herhangi bir yer değiştirme yapılmaz. Görüldüğü üzere değeri 21 olan eleman sıralamada olması gerektiği yere gelmiştir.
5. iterasyon: Tekrar dizinin başına dönülür ve sondan bir önceki elemana kadar aynı işlemler tekrarlanır. İterasyon sayısı dizinin boyutuna göre değişecektir.
Aşağıda C++ ile kabarcık sıralaması her bir karşılaştırma ve değiştirme işlemini gösterecek şekilde kodlanmıştır.
#include<iostream> #include<time.h> using namespace std; int Dizi[5]; void DiziOlustur() { srand (time(NULL)); for (int i=0; i<5; i++) { Dizi[i] = rand() % 99; } } void Degistir(int indeks_1, int indeks_2) { int temp; temp = Dizi[indeks_1]; Dizi[indeks_1] = Dizi[indeks_2]; Dizi[indeks_2] = temp; } void Bekle(int Saniye) { int Simdi = time(NULL); int Sonra = Simdi + Saniye; while(Simdi<=Sonra) { Simdi = time(NULL); } } void KabarcikSiralama() { int DegistirmeSayisi = 0; int KarsilastirmaSayisi = 0; for (int i=0; i<5; i++) for (int j=0; j<4; j++) { KarsilastirmaSayisi++; printf("\033[32m\n%d. karsilastirma: \033[m",KarsilastirmaSayisi); for (int k=0; k<5; k++) { if ((j+1==k)||(j==k)) { printf("\033[32m%d \033[m",Dizi[k]); } else { printf("%d ",Dizi[k]); } } Bekle(1); if (Dizi[j]>Dizi[j+1]) { DegistirmeSayisi++; printf("\033[35m %d. degistirme \033[m",DegistirmeSayisi); for (int k=0; k<5; k++) { if ((j+1==k)||(j==k)) { printf("\033[35m%d \033[m",Dizi[k]); } else { printf("%d ",Dizi[k]); } } Degistir(j+1,j); Bekle(1); } } } int main() { DiziOlustur(); cout<<"Dizi: "; for (int i=0; i<5; i++) printf("%d ", Dizi[i]); printf("\n"); KabarcikSiralama(); printf("\nDizinin sıralanmış hali: "); for (int i=0; i<5; i++) printf("%d ", Dizi[i]); }
DiziOlustur fonksiyonu ile 5 elemanlı rasgele bir dizi oluşturulmaktadır. Degistir fonksiyonu; kendisine gönderilen iki indeks numaralı dizi elemanlarını değiştirmektedir. Bekle fonksiyonu ise kendisine gönderilen sayı kadar saniye beklemektedir. Bu fonksiyon işlemlerin ekranda zaman aralıklı olarak gösterilmesini sağlamaktadır. KabarcikSiralama fonksiyonu ile de sıralama işlemi yapılmaktadır. Programın ekran çıktısı aşağıdaki örnekteki gibidir.