Kabarcık sıralaması(Bubble Sort)

En basit sıralama aligoritmalarından birisidir ama büyük dizilerde çok yavaş kalmaktadır. Eğer büyük dizilerde sıralama yapacaksanız çok zaman alır. Aligoritmanın karmaşıklığı en kötü durumda(tersten sıralı) O(n²) en iyi durumda ise O(n²/2) dir.

Çalışma mantığı

Örneğin dizimiz aşağıdaki gibi olsun.

88,12,76,55,36,45,1,35

  1. ilk iki sayıyı al(88,12)
  2. iki sayıyı karşılaştır
  3. eğer aldığın ilk sayı ikinci sayıdan büyük ise yer değiştir

bubble_sort

C Kodu

Yukarıdaki kodumuzu biraz daha düzenleyelim ve nasıl çalıştığına daha detaylı bakalım.

Çıktı:

bubble_sort2

 

Yazdığımız kodda dikkat ettiyseniz iç içe iki tane for döngüsü kullanıyoruz. İçerideki döngü işini bitirdiğinde dizideki en büyük eleman yani 88 en sona yerleşmiş oldu. Döngü ikinci kez çalışıp işini bitirdiğinde ise en büyük ikinci eleman yani 76 sıralanmış bir şekilde yerini almış oldu. Ayrıca dizimiz sıralı sayılardan oluşursa gereksiz yere bu kod çalışmış olacak bunu da kontrol altına almamız gerekiyor.

 

C Programlama Dili – Fonksiyonlar

Programlama dillerinin en önemli konularından birisi de fonksiyonlardır.Program içinde bir işlemi birden fazla yapacaksak bunu her seferinde yazmak yerine fonksiyon içinde bir kez tanımlarız ve gerektiğinde fonksiyonu çağırırız.Ayrıca fonksiyonlar programın derli toplu olmasında ve yaptığımız hataların daha kolay tespit edilmesinde bize yarar sağlarlar.

 

7.1)Fonksiyon Çeşitleri ve Fonksiyon Oluşturma

 

7.1.1)Değer döndürmeyen ve parametre almayan fonksiyonlar

Bu tip fonksiyonlar dışarıdan herhangi bir parametre almazlar ve çağrıldıkları yere geri değer döndürmezler.Ayrıca bu fonksiyonlara dışarıdan parametre gönderilemediği için genellikle sabit bir işleve sahip olurlar.

7.1.2)Değer döndürmeyen ve parametre alan fonksiyonlar

Bu tip fonksiyonlar çağrıldıkları yere değer döndürmezler ama dışarıdan parametre alırlar.

Yukarıda değindiğim gibi fonksiyonları kullanırken dikkat etmemiz gerekenler:

  • Fonksiyonu tanımlama : donus_tipi fonksiyon_adi(parametreler) şeklinde olmalıdır.Biz değer döndürmeyen ve parametre alan fonksiyonları incelediğimiz için donus_tipi yerine void yazdık parametre kısmına ise n değerini yazdık.
  • Fonksiyon çağırma: fonksiyonu çağırırken ise fonksiyon adımızı ve parantez içinde göndereceğimiz parametreyi yazdık.
  • Fonksiyon prototipi:Bu konuda ise dikkat etmemiz gereken husus prototipimiz main() fonksiyonundan önce tanımlamalıyız ya da fonksiyonumuzu main() fonksiyonundan önce yazmalıyız.

 

Girdiğimiz terim sayısını 5 kabul edersek çıktı:

[alert-success]1 1 2 3 5[/alert-success]

7.1.2)Değer döndüren ve parametre alan fonksiyonlar

Bu tip fonksiyonlar çağrıldıkları yere değer döndürürler.Buradaki en önemli nokta ise return ifadesidir.

return ifadesi

Daha önce gördüğümüz gibi değer döndürmeyen fonksiyonların başına void ifadesi koyuyorduk.Değer döndüren fonksiyonlarda ise fonksiyonda geri döndürülecek değere göre bir ifade kullanmalıyız.Örneğin fonksiyonumuz tam sayı döndürecek ise int karakter döndürecek ise char ifadesi kullanmalıyız.

Girilen sayının tek ya da çift olduğunu bize bildiren program

 

C Programlama Dili – Döngüler

Döngüler bir işi belirlediğimiz sayıda yapan kod bloklarıdır.Örneğin faktöriyel hesabı yapacaksak n tane sayıyı birbiriyle çarpmamız gerekecek.Burada çarpma işlemi n defa yapılacağından döngülere ihtiyaç duyarız.Döngülerde iki temel aşama vardır.Bunlardan ilki kontrol kısmıdır.İkincisi ise döngünün yapacağı iştir.Döngülerde kontrol kısmında hata varsa döngümüz çalışmayabilir ya da sonsuz döngü oluşabilir.Bu yazımda 3 döngüden bahsedeceğim.Bunlar; while,do while ve for yapılarıdır.

6.1)While Döngüsü

While döngüsünde bir kontrol ifadesiyle döngünün devam edip etmeyeceğine karar verilir.Süslü parantez içinde ise döngünün yapacağı işlemler olur.

Eğer döngüde tek satır kod çalışacak ise program 6.1’deki gibi tanımlanır.Aksi halde program 6.2’deki gibi bir tanımlama yapmalıyız.

Ekrana 5 defa “Merhaba Dunya” yazan program:

Çıktı:

[alert-success]Merhaba Dunya

Merhaba Dunya

Merhaba Dunya

Merhaba Dunya

Merhaba Dunya

[/alert-success]

Klavyeden girilen sayının faktöriyelini hesaplayan program

6.2)Do While Döngüsü

Do while döngüsü while döngüsü ile hemen hemen aynıdır.Aralarındaki fark ise while döngüsünde döngü şartı sağlanmıyorsa o döngü içerisindeki kod bloğu çalışmaz ama do while döngüsünde kod bloğu en az bir kez çalışır.

6.3)For Döngüsü

For döngüsü diğer iki döngü çeşidi ile aynı işleri yapabilir.Genellikle diğer iki döngü çeşidinden daha fazla kullanılır.

For döngüsünün genel yazım şekli;

While döngüsünde verdiğim örneklerin aynısını kullanacağım ki aralarıdaki fark daha iyi görülsün.

Ekrana 5 defa “Merhaba Dunya” yazan program.

Çıktı:

[alert-success]Merhaba Dunya

Merhaba Dunya

Merhaba Dunya

Merhaba Dunya

Merhaba Dunya

[/alert-success]

Klavyeden girilen sayının faktöriyelini hesaplayan program:

6.4)break komutu

Break komutu döngüyü durdurmak istediğimizde kullanırız.Örneğin ileri konularda anlatacağım diziler konusunda dizi içerisinde bir eleman ararken elemanı bulduktan sonra döngünün gereksiz yere çalışmasına gerek yok.İstediğimiz elemanı bulduğumuzda döngüyü durdurabiliriz.Nasıl kullanıldığına beraber bakalım.

Çıktı:

[alert-success]0

1

2

3

[/alert-success]

Yukarıdaki programda eğer sayımız 3’e eşit ise break komutu verdik yani döngüyü durdurduk.Eğer break komutu vermeseydik çıktımız ekrana 0 1 2 3 4 yazacaktı.

6.5)continue komutu

Continue komutu ise break komutunun tam tersidir.Döngünün devam etmesi halinde kullanılır.

 

0-100 arasındaki tek sayıları ekrana yazdıran program.(daha efektif şekilde yapılabilir ama continue komutu anlaşılsın diye bu şekilde yaptım)