Giriş
Şu satırı dahil ederiz. Bu bir C dili metodu
Şu satırı dahil ederiz. Bu bir C dili metodu
#include <stdlib.h>
Birinci parametre diziye pointer.
İkinci parametre dizinin uzunluğu
Üçüncü parametre dizideki elemanın byte cinsinden büyüklüğü
Dördüncü parametre karşılaştırma metodu
Örnek
Elimizde şöyle bir struct dizisi olsun.
İkinci parametre dizinin uzunluğu
Üçüncü parametre dizideki elemanın byte cinsinden büyüklüğü
Dördüncü parametre karşılaştırma metodu
Örnek
Şöyle yaparız. comparator metodun "const void*" olması gerekir.
int cmp(const void *v1, const void *v2)
{
const double *d1 = v1, *d2 = v2;
⋮
}
qsort(p, n, sizeof(double), cmp);
Şu kullanım yanlış
int cmp(const double *d1, const double *d2)
{
⋮
}
qsort(p, n, sizeof(double), (int (*)(const void *, const void *))cmp);
Örnek
Sayıları artan şekilde sıralamak için şöyle yaparız
int cmp(const void *v1, const void *v2) {
const int *p1 = v1, *p2 = v2;
return (*p1 > *p2) - (*p1 < *p2);
}
Eğer NaN değerler varsa şöyle yaparız
// sort by increasing values, with NaN after numbers
int cmp(const void *v1, const void *v2) {
const double *p1 = v1, *p2 = v2;
if (isnan(*p1)) {
return isnan(*p2) ? 0 : 1;
} else if (isnan(*p2)) {
return -1;
} else {
return (*p1 > *p2) - (*p1 < *p2);
}
}
Örnek
Eğe elimizde mevcut bir comparator varsa, kullanmak için şöyle yaparız
static int double_cmp(const double *d1, const double *d2)
{ return (*d1 > *d2) - (*d2 > *d1); }
static int double_void_cmp(const void *v1, const void *v2)
{ return double_cmp(v1, v2); }
double p[] = { 2.18, 6.28, 3.14, 1.20, 2.72, 0.58, 4.67, 0.0, 1, 1.68 };
const size_t n = sizeof p / sizeof *p;
qsort(p, n, sizeof *p, &double_void_cmp);
Elimizde şöyle bir struct dizisi olsun.
struct foo{
int a;
int b;
};
struct foo arr[10];
Sıralama için şöyle yaparız.int comp(const void *a, const void *b){
struct s2 *q1 = (struct s2 *)a;
struct s2 *q2 = (struct s2 *)b;
return(q1->a - q2->a);
}
Çağırmak için şöyle yaparız.qsort (arr, 10, sizeof(struct foo)
, comp);
Hiç yorum yok:
Yorum Gönder