دالة qsort  qsort هي دالة برمجية من مكتبة سي المعيارية ، تنفذ خوارزمية ترتيب (فرز) لمصفوفات من كائنات اعتباطية من تعريف المستخدم، استناداً على دالة أخرى للمقارنة، يعرِّفها المستخدم . تمت تسميتها بناءاً على خوارزمية "الفرز الأسرع- quicker sort" (تعديل من الفرز السريع (quicksort) من قبل R. S. Scowen) ، والذي تم استخدامه في الأصل لتنفيذه في مكتبة Unix C ، على الرغم من أن معيار C لا يتطلب تنفيذ الفرز السريع.   يتم تحقيق العمل على أنواع مختلفة من البيانات ( "تعدد الأشكال"-Polymorphism ) من خلال أخذ مؤشر دالة إلى دالة مقارنة ، بالإضافة إلى متغير يحدد حجم كائنات الإدخال الفردية الخاصة بها. تتطلب سي المعيارية دالة المقارنة لتنفيذ الترتيب الكلي على العناصر في المصفوفة المٌدخلة.   على سبيل المثال، يمكن لدالة qsort أن تقوم بترتيب هيكل بيانات "طابور الأولويات- priority queue"، المبني على مصفوفة (array) من العقد التي تضم كل منهم ما يدل على أولويتها و موضعها في الطابور، و التي قد يتم نداءها في نهاية عملية إضافة (إدراج) عقدة جديدة (enqueue)، لوضع كل عقدة في موضعها المناسب في الطابور. في حال استخدام الدالة في تطبيق متشعب، يجب مراعاة التزامن بين شرائط التعليمات التي تحاول الوصول للطابور ذو الأولوية، بحيث تكون عملية إضافة العٌقد عملية ذرية- غير قابلة للمقاطعة.  يجب ملاحظة ما يلي:  1- لن تصلح دالة qsort لفرز طابور أولويات مبني على هيكل القوائم المتصلة، حيث أن العٌقد في هذه الحالة غير مختزنة كقطعة متجاورة بالذاكرة كما المصفوفة، بل إن كل عقدة تشير للتي تليها.  2- في حال إدراج عقدة جديدة في طابور الأولويات، يٌفضل أن تبحث العقدة عن موضعها في الطابور بتعقيد زمني formula_1 بدلاً من إدراجها في نهاية الطابور ثم إجراء عملية الفرز بتعقيد زمني formula_2 ، حيث أن n هو طول الطابور.  تظهر دالة qsort في Version 2 Unix في عام 1972 كدالة مكتبية بلغة التجميع. تختلف واجهتها عن الإصدار الحديث ، الذي يمكن أن يكون نموذجها الإعلاني (prototype) مثل codice_1 لترتيب سلاسل نصية بطول "length" من البايتات المخزنة بشكل متصل في الذاكرة من النطاق [ start، end). هذا ، وبالإضافة لعدم وجود دالة مقارنة قابلة للاستبدال ، فإن ذلك جعل من غير المناسب فرز الأعداد الصحيحة ذوات النهاية الأصغر (Little-Endian) للنظام بشكل صحيح ، أو أي هياكل بيانات أخرى.  في الإصدار 3 من نظام التشغيل Unix ، تم توسيع الواجهة عن طريق استدعاء دالة مقارنة. قد يتم تعديل هذه الدالة من قبل المستخدم لتنفيذ أي نوع من الترتيب (تصاعدي/تنازلي) ، بطريقة مكافئة للمُدخل "codice_2" لدالة qsort في صورتها المعتمدة.   الإصدار 4 من Unix يضيف تنفيذ برمجي بلغة C ، بواجهة مشابهة للمعيار. تمت إعادة كتابته في عام 1983 لصالح Berkeley Software Distribution (BSD) . تم توحيد الدالة في ANSI C عام 1989. تمت إزالة الكود البرمجي بلغة التجميع في الإصدار 6 Unix .   في عام 1991 ، لاحظ موظفو Bell Labs أن إصدارات AT&T و BSD من qsort تستهلك وقتاً تربيعياً لبعض المدخلات البسيطة. وهكذا صمم جون بنتلي ودوغلاس ماكلروي تطبيقًا جديدًا أسرع وأكثر قوة. أنتج McIlroy لاحقًا مدخلات تربيعية أكثر تعقيدًا ، تسمى "AntiQuicksort" ، في عام 1998.   يوضح الكود التالي بلغة C كيفية ترتيب مصفوفة من الأعداد الصحيحة باستخدام دالة qsort :   /* Comparison function. Receives two generic (void) pointers to the items under comparison. */ int compare_ints(const void *p, const void *q) {  /* Sort an array of n integers, pointed to by a. */ void sort_ints(int *a, size_t n) {  نظرًا لأن دالة المقارنة مثل "compare_ints" الخاصة بـ codice_3 لا تقبل سوى مؤشرين ، فإن تمرير معلمات إضافية (على سبيل المثال: دالة مقارنة تقارن الفرق بين القيمتين المشار لهما بالمؤشرين الممرين للدالة نفسها مع قيمة أخرى) يجب أن يتم تكون القيمة الأخرى لمتغير من المتغيرات العامة (global variables). تم حل المشكلة بواسطة أنظمة BSD وGNU الشبيهة بـ Unix من خلال إدخال وظيفة codice_4 ، والتي تسمح بتمرير معلمة إضافية إلى وظيفة المقارنة. الإصداران من codice_4 لهما أوامر وسيطة مختلفة. يعرّف C11 الملحق K codice_6 بشكل أساسي مطابق لـ codice_4 الخاص بـ GNU.  مراجع