qsort
- C kursu
- Orta seviye
- Ders 26/116
- 5 dk
qsort ile fonksiyon işaretçisi kullanarak sıralamayı öğrenirsin.
qsort fonksiyonu
qsort, standart kütüphanenin genel sıralama fonksiyonudur. Dizinin türünden bağımsız çalışır; karşılaştırmayı bir fonksiyon işaretçisi üzerinden alır.
Yazım: qsort(arr, n, sizeof(int), cmp);. Parametreler sırayla: dizi başlangıcı, eleman sayısı, eleman boyutu ve karşılaştırıcı fonksiyon. Karşılaştırıcı, const void * iki parametre alır ve int döndürür. Negatif, sıfır veya pozitif değer döndürür; bu sayede sıralama yönü belirlenir. qsort için <stdlib.h> gerekir.
Karşılaştırıcı fonksiyon
qsort'un karşılaştırıcısı, iki const void * parametre alır ve int döndürür. Negatif, ilk küçük; pozitif, ilk büyük; sıfır, eşit demektir.
Örnek: int cmp(const void *a, const void *b) { return *(int *)a - *(int *)b; }. Burada void * parametreler önce int *'a çevrilir, sonra dolaylanır. Çıkarma sonucu negatif/sıfır/pozitif verir; bu qsort'un beklediği biçimdir. Karşılaştırıcı, sıralama yönünü belirler; çıkarmayı ters çevirirsen azalan sıralama elde edersin.
Uygulama qsort ile diziyi sırala
int arr[5] = {5, 2, 8, 1, 9}; tanımla. int cmp(const void *a, const void *b) yaz; *(int *)a - *(int *)b döndürsün. qsort(arr, 5, sizeof(int), cmp); ile sırala. Bir for döngüsüyle printf("%d ", arr[i]) ile yazdır, sonra printf("\n") ekle. <stdlib.h> başlık dosyasını ekle.
Başlangıç kodu
#include <stdio.h>
#include <stdlib.h>
// cmp karşılaştırma fonksiyonunu yaz
// qsort ile diziyi sırala
// for ile yazdır
int main(void) {
return 0;
}Örnek çözüm
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a, const void *b) {
return *(int *)a - *(int *)b;
}
int main(void) {
int arr[5] = {5, 2, 8, 1, 9};
qsort(arr, 5, sizeof(int), cmp);
for (int i = 0; i < 5; i++) printf("%d ", arr[i]);
printf("\n");
return 0;
}Beklenen çıktı
1 2 5 8 9
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 qsort çağrısını tamamla
int arr[5] = {5, 2, 8, 1, 9};
____(arr, 5, sizeof(int), cmp);
int arr[5] = {5, 2, 8, 1, 9};
qsort(arr, 5, sizeof(int), cmp);
Açıklama: qsort genel sıralama fonksiyonudur.
2 qsort parametrelerini eşle
| Kavram | Anlamı |
|---|---|
arr |
Dizi başlangıcı |
5 |
Eleman sayısı |
sizeof(int) |
Eleman boyutu |
cmp |
Karşılaştırıcı |
3 qsort karşılaştırıcısı ne döndürmelidir?
- Yalnız 0 veya 1
- Bir işaretçi
- Boolean
- Negatif, 0 veya pozitif Doğru cevap
Açıklama: Karşılaştırıcı negatif, 0 veya pozitif döndürür.