Bu sayfadaki yazılar
Sayfanın metni
Sayfa 71
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 70
Şimdiye kadar bubble sort yönteminin dezavantajlarından bahsettik. Ancak bu yöntem bazı yönlerden çok kullanışlı. Eğer sıralamanın yapılacağı dizideki elemanlar hemen hemen sıralı durumdaysa sıralama işlemi çok çabuk biter.
En önemli avantajlardan birisi sıralama devam ederken ilk sıralanmış elemanları kullanıcıya verebilmektir. Birçok sıralama yönteminde sıralama bitene kadar kullanıcı beklemek zorundadır. Ancak bubble sort yönteminde sıralama işleminin başlaması ile birlikte derhal sonuç almaya başlarız.
Şimdi örneğimizdeki kelimeleri kullanarak bubble sort'un nasıl çalıştığını inceleyelim: ANİ AĞIR EVLAT DİŞ MENÜ TIR DÜŞ HÜR Sıralamaya başlamadan evvel dizinin en altında ANİ kelimesi en üstünde HÜR kelimesi yer alıyor. Sıralama işleminde karşılaştırmayı üstten alta veya alttan üste doğru yapabiliriz. Ancak üstten alta karşılaştırma yapmak her seferinde en azından bir elemanı sonuç olarak ortaya çıkaracağından tercih edilebilir. Karşılaştırılan elemanlar arasında değişiklik yapıldığında yukarı çıkan elemanları işaretleyeceğiz. (Örneğimizde hür kelimesi hariç diğer kelimeleri büyük harfle yazarak işaretledik). Bir sonraki turda sadece yukarı doğru çıkan (işaretlenmiş kelimeler) elemanları karşılaştırmak yeterli olacak. Sıralama işlemine ilk başladığımızda en üstte bulunan hür kelimesi hariç tüm elemanları işaretliyoruz. Yukarıdan aşağıya doğru ilk olarak düş ve hür elemanlarını karşılaştırıyoruz. Bu iki eleman sıralı olduğundan bir sonraki karşılaştırmaya geçiyoruz. Tır ve düş elemanları sırasız olduğundan yerleri değişiyor. TIR kelimesi yukarı çıktığından bu kelimeyi işaretliyoruz (büyük harfle gösteriliyor). İlk turun sonunda dizinin durumu: ani ağır diş EVLAT düş MENÜ TIR hür evlat, menü ve tır kelimeleri yukarı doğru çıktıklarından işaretlendiler. Bir sonraki turda sadece bu üç kelime yukarıdaki kelimelerle karşılaştırılacaklar. EVLAT kelimesini de bir sonraki tur için en alt nokta olarak işaretleyebiliriz. Bu noktadan daha aşağı karşılaştırma yapmaya gerek yok. Ani, ağır ve diş kelimelerini kullanıcıya sonuç olarak verebiliriz çünkü dizi buraya kadar sıralandı. İkinci tura başladığımızda ilk olarak TIR ve hür kelimelerinin yerlerini değiştiriyoruz. Menü ve hür kelimeleri de yer değiştiriyor. Düş kelimesi işaretlenmediğinden hür kelimesiyle karşılaştırılmıyor. EVLAT ve düş kelimeleri sırasız olduklarından yer değiştiriyorlar. İkinci turun sonunda dizimiz aşağıdaki hale geliyor: ani ağır diş düş EVLAT hür MENÜ tır Bu noktada dizimiz sıralandı ancak biz bunu üçüncü turda anlıyoruz. Program döküm ekindeki program normal bubble sort programının geliştirilmişidir. Buna rağmen sıralama N log N kuralına göre çalışıyor. Ancak yeni eklemelerle bu yöntemin eskisine göre çok hızlandığını söyleyebiliriz.
Şimdi programı biraz açıklayalım: İlk olarak dizideki eleman sayısı soruluyor. Daha sonra dizideki elemanları giriyoruz. Girilen veriler N$ adlı diziye yerleştiriliyor. Verileri kullanıcıdan almak yerine bir dosyadan da okuyabilirsiniz. 180 numaralı satırda sıralama işlemine başlıyoruz. J değişkeninde şimdiye kadar sıralaması bitmiş ve sonuç olarak kullanıcıya iletilmiş eleman sayısı saklanıyor. Bu değişkenin ilk değeri sıfır. 190-220 satırları arasında indeks dizisi hazırlanıyor. Sıralamaya başlamadan evvel indeks dizisindeki elemanların değeri çok basit: ilk eleman 1, ikinci eleman 2, üçüncü eleman 3.
İndeks dizisinde herhangi bir verinin bir üstteki veriyle kontrol edilip edilmemesi gerektiğini de saklıyoruz. Eğer indeks dizisindeki değer eksi işaretliyse, işaret ettiği elemanın bir üstteki elemanla karşılaştırılması gerekir. İlk turda tüm elemanların karşılaştırılmasını istediğimizden son eleman hariç diğerlerine eksi işaret veriyoruz. J8 değişkeninde dizide karşılaştırmanın yapılacağı en alt noktayı saklıyoruz. İlk turda tüm dizide karşılaştırma yapacağımızdan bu değişkenin ilk değeri birdir. 250-330 arasındaki satırlarda dizideki taramayı yapıyoruz. İki elemanın karşılaştırılması için X2 değişkeninin negatif olması gerekiyor. Eğer X2 değişkeni pozitifse karşılaştırma yapmadan 330 numaralı satırdaki NEXT komutuna atlıyoruz. Eğer J2 ve J3 değişkenlerinin işaret ettiği elemanlar sırasızsa bunlara karşılık gelen indekslerin yerini değiştirip yukarı çıkanı eksi olarak işaretliyoruz. Bir sonraki tura başlamadan evvel 360 numaralı satırda sıralanmış elemanı ekrana yazıyoruz. Bu kısa programı sıralama gerektiren programlarınızda kullanarak zamandan kazanabilirsiniz. Şimdilik hoşçakalın.