Dizi Sıralama İşlevi
Önceki IX. Oylum - Arama ve Sıralama Sonraki
Dizi Sıralama İşlevi
Vereceğiniz bir karşılaştırma işlevi kullanılarak bir diziyi sıralamak isterseniz, qsort işlevi bu iş için biçilmiş kaftandır. Bu işlevin prototipi stdlib.h başlık dosyasındadır.
void qsort
(void           *dizi,
 size_t          üye-sayısı,
 size_t          boyut,
 comparison_fn_t karş-işlevi)
işlev
Bu işlev, boyut baytlık üye-sayısı eleman içeren dizi dizisini sıralar.
karş-işlevi, karşılaştırma yapmak için kullanılır. Bu işlev iki argümanla çağrılabilmeli ve birinci argümanın ikinci argümandan küçük, büyük ya da ona eşit olması durumlarına bağlı olarak sırasıyla sıfırdan küçük, büyük bir değerle ya da sıfır ile dönmelidir.
Uyarı
İki nesnenin karşılaştırması eşitlikle sonuçlanıyorsa, sıralama sonrası hangisinin önce olacağı kestirilemez. Bu durumda sıralamanın kararsız olduğundan söz edilebilir. Bu sadece karşılaştırma elemanların belli bir bölümünde yapıldığında bir fark oluşturur. İki elemanın aynı sıralama anahtarı olması başka bakımlardan bir fark oluşturabilir.
Kararlı sıralama istiyorsanız, karşılaştırma işlevini yazarken bu sonucun elde edilmesini sağlayabilirsiniz. İki eleman arasında başka kriterlere göre ayrım yapılabiliyorsa buna göre ek bir karşılaştırma yaparsınız ya da adreslerini karşılaştırırsınız. Ancak bu işlemler sıralama algoritmasının verimini düşüreceğinden çok gerekli olmadıkça yapmamanız önerilir.
Aşağıda double türünden sayılardan oluşan bir dizi ile çalışan bir sıralama örneği vardır. Kullanılan karşılaştırma işlevi Karşılaştırma İşlevinin Tanımlanması bölümündeki örnekte tanımlanmıştı:
{
  double *dizi;
  int boyut;
  …
  qsort (dizi, boyut, sizeof (double), compare_doubles);
}
İşlev çabuk sıralama (quick sort) algoritması kullanarak gerçeklendiğinden işlevin ismi bu algortimanın isminden türetilmiştir.
Bu kütüphanedeki qsort gerçeklemesi sadece dizinin kapladığı bellek bölgesi ile sınırlı kalmayabilir ve diziyi saklamak için fazladan bellek kullanabilir.
Önceki Üst Ana Başlık Sonraki
Dizi Arama İşlevleri Başlangıç Arama ve Sıralama Örneği
Bir Linux Kitaplığı Sayfası