C Dilinde Bubble Sort Algoritma Kodlaması

Bu yazı faydalı oldu mıı?

  • Evet

    Kullanılan: 1 100.0%
  • Hayır

    Kullanılan: 0 0.0%

  • Kullanılan toplam oy
    1

Bu konuyu okuyanlar

erkankarabulut

Öğrenci
Katılım
18 Mart 2016
Mesajlar
30
Reaksiyon puanı
7
Puanları
8
Yaş
27
C Dilinde Bubble Sort Algoritma Kodlaması

Sıralama algoritmaları serimizde bubble sort, Türkçesiyle kabarcık sıralamasını anlatmıştık. Bu dersimizde bubble sort algoritmasının c dilinde kodlamasını yapacağız. Bubble sort algoritmasını detaylı olarak öğrenmek ve bubble sort algoritması akış diyagramı için buraya tıklayın.

Başlamadan önce bubble sort algoritmasını kısaca bir hatırlatalım. Bubble sort algoritmasında ardışık elemanları kendi aralarında karşılaştırıp istenilen duruma göre büyükten küçüğe yada küçükten büyüğe olacak şekilde sıralanır. Bu işlem dizinin bütün elemanları sıralı olana kadar devam eder.

Bubble sort algorimasının c dilinde birden fazla kodlaması olabilir. Bubble sort algoritmasını ayrıntılı olarak anlattığımız derste söylediğimiz gibi, tamamen sıralı bir dizi elde edebilmek için en az bir en fazla dizinin eleman sayısının bir eksiği kadar yukarıda anlattığımız işlem bütün dizi için tekrarlanmalıdır. Bubble sort algoritmasının birden fazla c kodlaması olabilmesi buradan gelir. Bubble sort algoritmasının c dilinde 2 farklı şekilde kodlamasını gösterelim.

Bubble Sort C Kodu

Kaynak Kod:
Kod:
#include <stdio.h>

int main()
{
        static int k,dizi[100],i,x,boyut,temp;
        printf("Dizinin boyutunu giriniz :"); scanf("%d",&boyut);
        for(i=0;i<boyut;i++)
        {
              printf("Dizinin %d. elemanini giriniz :",i+1); scanf("%d",&dizi[i]);
        }
        for(i=0;i<boyut;i++)
        {
              printf("%d\t",dizi[i]);
        }
        while(x<boyut)
        {
              for(i=0;i<boyut-1;i++)
              {
                    if(dizi[i]<dizi[i+1])
                    {
                          temp=dizi[i];
                          dizi[i]=dizi[i+1];
                          dizi[i+1]=temp;
                           x=0;
                    }
                    else
                    {
                            x++;
                    }
              }
              printf("\n\n");
              for(k=0;k<boyut;k++)
              {
                      printf("%d\t",dizi[k]);
              } 
        }
        return 0;
}
Kod Analiz:

- İlk olarak kullanıcıdan dizinin boyutunu ve dizinin elemanlarını teker teker aldık.
- Daha sonra aldığımız diziyi 1 sefer ekrana yazdırdık.
- While döngüsünün içerisindeki for döngüsünde dizinin her bir elemanını bir sonraki elemanla karşılaştırıp duruma göre yer değiştirdik.
- Karşılaştırma işleminde en son olarak son eleman ve ondan bir önceki karşılaştırılacağından for döngüsü dizinin boyutunun bir eksiği kadar döner.
- Büyükten küçüğe sıraladığımızı varsayalım. Eğer baktığımız eleman bir sonraki elemandan büyükse o zaman değişme işlemi yapılmayacak ve else kısmında x değişkeni 1 artacak. Eğer değişme olursa x değişkeni 0 olacak.
- Burada dikkat edilmesi gereken yer, eğer hiç bir değişme işlemi yapılmazsa x değişkeni boyut değişkenine eşit olacak ve while döngüsünden çıkılacak.
- Yani hiç bir yer değiştirme işleminin yapılmaması demek dizi zaten sıralı halde demektir. Bu durumda dizi sıralı olduğu durumda while döngüsünden çıkılacak.

Ekran Görüntüsü:




Resimde de gördüğümüz gibi 5 elemanlı dizide 3. for döngüsünden sonra döngü durmuş ve dizi sıralı hale ulaşmıştır. Dizinin 3. kez ekrana yazımında dizide son değişiklik yapılmıştır. 4. yazımında ise artık bir önceki ile fark olmayınca program durdu.

Yukarıdaki kodlamada karşılaştırma yaptığımız for döngüsü en fazla dizinin eleman sayısının bir eksiği kadar gerçekleşir. Yani for döngüsü eleman sayısının bir azı kere döndüğünde dizi kesinlikle sıralı halde olmalıdır.

Fakat kullandığımız while döngüsü sayesinde dizi sıralı olduğu anda program durmuş ve fazladan işlemleri engellemiştir. Şimdi ise bubble sort algoritmasının başka bir c kodlamasını beraber inceleyelim. Bu sefer while döngüsü kullanmadan eleman sayısı -3 kadar for döngüsü dönsün ve sıralı diziyi elde edelim.

Bubble Sort C Kodu 2

Kaynak Kod:
Kod:
#include <stdio.h>

int main()
{
    static int k,dizi[100],i,x,boyut,temp,j;
    printf("Dizinin boyutunu giriniz :"); scanf("%d",&boyut);
    for(i=0;i<boyut;i++)
    {
          printf("Dizinin %d. elemanini giriniz :",i+1); scanf("%d",&dizi[i]);
    }
    printf("Girdiginiz dizi :  ");
    for(i=0;i<boyut;i++)
    {
          printf("%d\t",dizi[i]);
    }
    for(i=0;i<boyut-1;i++)
    {
          for(j=1;j<boyut;j++)
          {
                if(dizi[i]<dizi[i+1])
                {
                    temp=dizi[i];
                    dizi[i]=dizi[i+1];
                    dizi[i+1]=temp;
                }
          }
          printf("\n\n");
          for(k=0;k<boyut;k++)
          {
                  printf("%d\t",dizi[k]);
          }
      }
      return 0;
}
Kod Analiz:

- Yukarıdaki kodun ilk koddan farkı while döngüsü yerine bir for döngüsü fazladan kullandık.
- Bunun sebebi yukarıda da anlattığımız gibi program eleman sayısının bir eksiği kadar dönüp dizi sıralı hale gelecektir.
- Bunun haricinde diğer kısımların analizi yukarıdaki analizin aynısıdır.
- Aşağıdaki ekran görüntüsünde de gördüğünüz gibi dizi sıralı olmasına rağmen ekrana 1 kere daha yazılmıştır.

Ekran Görüntüsü:



C dili dersleri serisinin bu dersinde c programlama dilinde bubble sort yani kabarcık sıralaması algoritmasının c dilindeki kodlamasının 2 farklı örneğini sizlerle paylaştık.

Ayrıca "C Dilinde İnsertion Sort Algoritma Kodlaması" için buraya tıklayınız.

"C Dilinde Bubble Sort Algoritma Kodlaması" adlı bu makaleyi beğendiyseniz lütfen yorum yapmayı ve paylaşmayı unutmayın.

Kaynak: Pubtekno
 

erkankarabulut

Öğrenci
Katılım
18 Mart 2016
Mesajlar
30
Reaksiyon puanı
7
Puanları
8
Yaş
27
Resimler hatalıdır arkadaşlar. Gerçek ekran görüntülerini buraya ekledim

Örnek 1 için ekran görüntüsü :

Ekran%2BG%25C3%25B6r%25C3%25BCnt%25C3%25BCs%25C3%25BC%2B%2528237%2529.png


Örnek 2 için ekran görüntüsü :

Ekran%2BG%25C3%25B6r%25C3%25BCnt%25C3%25BCs%25C3%25BC%2B%2528236%2529.png
 
Üst