CodeBlanks Logo Icon CodeBlanks

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

main.c
#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

main.c
#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

Soru
int arr[5] = {5, 2, 8, 1, 9};
____(arr, 5, sizeof(int), cmp);
Cevap
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.

Orta seviye bölümündeki tüm dersler