Skip to main content

C Programlama : Kabarcık Sıralama

Birden çok arama ve sırama algoritmaları mevcut. Bu sıralama algoritmalarından bir tanesi de Buble Sort adı verilen Kabarcık sıralamadır.  Kabarcık Sıralama algoritması aşağıdaki gibi gibi çalışır.

Kabarcık Sıralaması, bilgisayar bilimlerinde kullanılan yalın bir sıralama algoritmasıdır. Sıralanacak dizinin üzerinde sürekli ilerlerken her defasında iki öğenin birbiriyle karşılaştırılıp, karşılaştırılan öğelerin yanlış sırada olmaları durumunda yerlerinin değiştirilmesi mantığına dayanır. Algoritma, herhangi bir değişiklik yapılmayıncaya kadar dizinin başına dönerek kendisini yineler. Adına “Kabarcık” sıralaması denmesinin nedeni büyük olan sayıların aynı suyun altındaki bir kabarcık gibi dizinin üstüne doğru ilerlemesidir.

En basit olarak bir kabarcık sıralaması örneği aşağıda verilmiştir.

 

Uygulanmasına bir örnek verecek olursak ;

 

Adım-Adım Uygulama

Elimizde  5 1 4 2 8 değerlerine sahip 5 elemanlı bir dizi olsun. Bunu bubble sort kullanarak adım adım sıralayalım:

İlk Döngü:
5 1 4 2 8 ) –> ( 1 5 4 2 8 ), İlk iki elemanı karşılaştırıyorum ve swapping yapıyorum.
( 1 5 4 2 8 ) –> ( 1 4 5 2 8 ),  5 > 4 swap yapıyorum
( 1 4 5 2 8 ) –> ( 1 4 2 5 8 ), 5 > 2 swap yapıyorum
( 1 4 2 5 8 ) –> ( 1 4 2 5 8 ), 8>5 olduğundan bu adımda swap yapmıyorum
İkinci Döngü:
1 4 2 5 8 ) –> ( 1 4 2 5 8 )
( 1 4 2 5 8 ) –> ( 1 2 4 5 8 ),  4 > 2 swap yapıyorum
( 1 2 4 5 8 ) –> ( 1 2 4 5 8 )
( 1 2 4 5 8 ) –> ( 1 2 4 5 8 ), İlk döngüm bittiğine göre sondaki elemanımın en büyük olduğunu biliyorum. gereksiz bir adımdır.
Sıralama işlemi tamamlandı, fakat bunu algoritma bilmiyor bunun için bir adım daha dolaşışır.
Üçüncü Döngü:
1 2 4 5 8 ) –> ( 1 2 4 5 8 )
( 1 2 4 5 8 ) –> ( 1 2 4 5 8 ) –> İki karşılaştırmada swap işlemi yapmadığımdan sıralama gerçekleşmiştir.
( 1 2 4 5 8 ) –> ( 1 2 4 5 8 ), sondan bir önceki adıma da ikinci döngü sayesinde bakmama gerek yoktur.
( 1 2 4 5 8 ) –> ( 1 2 4 5 8 ), gereksiz adım

 

 
 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define BOYUT 10
// Kabarcık Sıralama Yöntemiyle Dizinin Elemanlarını Sıralar
void KabarcikSirala(int dizim[], int BOYUTUM);
int BuyukAra(int dizim[], int BOYUTUM);
int DiziTopla(int dizim[], int BOYUTUM);
int main()
{
int i;
int dizi[BOYUT];
srand(time(NULL)); 
for(i=0;i<=BOYUT-1; i++)
   {
      dizi[i]=1+rand()%100;
   }
printf("Siralanmamis Dizi Su sekildedir \n\n");
for(i=0;i<=BOYUT-1; i++)
   printf("%d\t",dizi[i]);
// Kabarcık Sıralama Fonksiyonunu Cağar
KabarcikSirala(dizi,BOYUT);
 
// Simdi Sıralanmıs Veri
printf("\nSiralanmis Dizi Su sekildedir \n\n");
for(i=0;i<=BOYUT-1; i++)
   printf("%d\t",dizi[i]);
printf("\nDizinin En Buyuk Elamani :  %d\n",BuyukAra(dizi,BOYUT));
printf("\nDizinin Elamanlari Toplami :  %d\n",DiziTopla(dizi,BOYUT));
system("PAUSE");   
}
// Kabarcık Sırala Adında Fonksiyon
void KabarcikSirala(int dizim[], int BOYUTUM)
{
 int i,tur,gecici;
 for(tur=1; tur<=BOYUTUM-1; tur++)
  for(i=0; i<=BOYUTUM-2; i++)
       if(dizim[i]>dizim[i+1])
       {
          gecici=dizim[i];
          dizim[i]=dizim[i+1];
          dizim[i+1]=gecici;
       }   
}
//
int BuyukAra(int dizim[], int BOYUTUM)
{
   int enbuyuk,i,j;
   enbuyuk=dizim[0];
 for(i=0; i<=BOYUTUM-1; i++)
    if(dizim[i]>enbuyuk)
        enbuyuk=dizim[i];
 
return enbuyuk;       
}
int DiziTopla(int dizim[], int BOYUTUM)
{
  int toplam=0,i;
  for(i=0; i<=BOYUTUM-1; i++) 
       toplam+=dizim[i];        
return toplam;       
}

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

Aytaç Cici

İstanbul Üniversitesi Bilgisayar Mühendisliği mezunu bir Yazılım Geliştirici. Çeşitli zamanlarda Java, PHP, C# ve Delphi gibi diller kullanarak yazılım geliştirmiştir. Bir dönem SEO alanında da çalışmalar yapmıştır.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Email
Print