qsort(3)

الاسم
qsort, qsort_r - ترتيب مصفوفة

المكتبة
مكتبة سي المعيارية (libc، -lc)

موجز
#include <stdlib.h>

void qsort(size_t n, size_t size;
           void base[n * size], size_t n, size_t size,
           typeof(int (const void [size], const void [size]))
               *compar);
void qsort_r(size_t n, size_t size;
           void base[n * size], size_t n, size_t size,
           typeof(int (const void [size], const void [size], void *))
               *compar,
           void *arg);

    متطلبات ماكروات اختبار الميزات لـ glibc (انظر feature_test_macros(7)):

qsort_r():
    _GNU_SOURCE

الوصف
الدالة qsort() ترتب مصفوفة تحتوي على n عنصر بحجم size. المعامل base يشير إلى بداية المصفوفة.

تُرتب محتويات المصفوفة بترتيب تصاعدي وفقًا لدالة مقارنة يشير إليها compar، والتي تُستدعى بمعاملين يشيران إلى الكائنات الجاري مقارنتها.

يجب أن تُرجع دالة المقارنة عددًا صحيحًا أقل من الصفر أو مساويًا له أو أكبر منه إذا كان المعامل الأول يُعتبر على التوالي أقل من الثاني أو مساويًا له أو أكبر منه. إذا تساوى عضوان في المقارنة، فإن ترتيبهما في المصفوفة المرتبة غير محدد.

الدالة qsort_r() مطابقة لـ qsort() باستثناء أن دالة المقارنة compar تأخذ معاملًا ثالثًا. يُمرر مؤشر إلى دالة المقارنة عبر arg. بهذه الطريقة، لا تحتاج دالة المقارنة إلى استخدام متغيرات عامة لتمرير معاملات عشوائية، وبالتالي فهي قابلة لإعادة الدخول وآمنة للاستخدام في الخيوط.

قيمة الإرجاع
الدالتان qsort() و qsort_r() لا تُرجعان أي قيمة.

السمات
للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر attributes(7).
الواجهة | السمة | القيمة
qsort(), qsort_r() | سلامة الخيوط | MT-Safe

المعايير

qsort()
    C11, POSIX.1-2008.

التاريخ

qsort()
    POSIX.1-2001، C89، SVr4، 4.3BSD.

qsort_r()
    glibc 2.8.

ملاحظات
لمقارنة سلاسل محارف C، يمكن لدالة المقارنة استدعاء strcmp(3)، كما هو موضح في المثال أدناه.

أمثلة
لمثال على الاستخدام، انظر المثال تحت bsearch(3).

مثال آخر هو البرنامج التالي، الذي يرتب السلاسل المحرفية المعطاة في معاملات سطر الأوامر:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    static int
    cmpstringp(const void *p1, const void *p2)
    {
        /* المعاملات الفعلية لهذه الدالة هي "مؤشرات إلى
           مؤشرات إلى char"، لكن معاملات strcmp(3) هي "مؤشرات
           إلى char"، ومن هنا جاء التحويل التالي مع إلغاء الإشارة. */

        return strcmp(*(const char **) p1, *(const char **) p2);
    }

    int
    main(int argc, char *argv[])
    {
        if (argc < 2) {
            fprintf(stderr, "الاستخدام: %s <سلسلة>...\n", argv[0]);
            exit(EXIT_FAILURE);
        }

        qsort(&argv[1], argc - 1, sizeof(char *), cmpstringp);

        for (size_t j = 1; j < argc; j++)
            puts(argv[j]);
        exit(EXIT_SUCCESS);
    }

انظر أيضًا
sort(1), alphasort(3), strcmp(3), versionsort(3)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.