<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ar">
	<id>https://3rabica.org/index.php?action=history&amp;feed=atom&amp;title=%D8%AF%D8%A7%D9%84%D8%A9_qsort</id>
	<title>دالة qsort - تاريخ المراجعة</title>
	<link rel="self" type="application/atom+xml" href="https://3rabica.org/index.php?action=history&amp;feed=atom&amp;title=%D8%AF%D8%A7%D9%84%D8%A9_qsort"/>
	<link rel="alternate" type="text/html" href="https://3rabica.org/index.php?title=%D8%AF%D8%A7%D9%84%D8%A9_qsort&amp;action=history"/>
	<updated>2026-06-08T16:45:31Z</updated>
	<subtitle>تاريخ التعديل لهذه الصفحة في الويكي</subtitle>
	<generator>MediaWiki 1.43.7</generator>
	<entry>
		<id>https://3rabica.org/index.php?title=%D8%AF%D8%A7%D9%84%D8%A9_qsort&amp;diff=3509132&amp;oldid=prev</id>
		<title>عبد العزيز: بوت:صيانة المراجع.</title>
		<link rel="alternate" type="text/html" href="https://3rabica.org/index.php?title=%D8%AF%D8%A7%D9%84%D8%A9_qsort&amp;diff=3509132&amp;oldid=prev"/>
		<updated>2023-08-16T21:42:53Z</updated>

		<summary type="html">&lt;p&gt;بوت:صيانة المراجع.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;صفحة جديدة&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{يتيمة|تاريخ =أغسطس 2023}}&lt;br /&gt;
{{مقالة غير مراجعة|تاريخ =أغسطس 2023}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;qsort&amp;#039;&amp;#039;&amp;#039; هي دالة برمجية من [[مكتبة سي المعيارية|مكتبة سي المعيارية ،]] تنفذ [[خوارزمية ترتيب|خوارزمية]] ترتيب (فرز) لمصفوفات من كائنات اعتباطية من تعريف المستخدم، استناداً على دالة أخرى للمقارنة، يعرِّفها المستخدم . تمت تسميتها بناءاً على خوارزمية &amp;quot;الفرز الأسرع- quicker sort&amp;quot; &amp;lt;ref name=&amp;quot;v2&amp;quot;&amp;gt;{{استشهاد ويب|صفحة=193|محرر1-وصلة=Ken_Thompson|محرر2-وصلة=Dennis_Ritchie|تاريخ       =June 12, 1972|عنوان       =UNIX Programmer&amp;#039;s Manual, Second Edition|مسار        = https://www.tuhs.org/Archive/Distributions/Research/Dennis_v2/v2man.pdf#page=193|ناشر        =[[مختبرات بل|Bell Telephone Laboratories]]|مسار أرشيف= https://web.archive.org/web/20230730004315/https://www.tuhs.org/Archive/Distributions/Research/Dennis_v2/v2man.pdf|تاريخ أرشيف=2023-07-30}}&amp;lt;/ref&amp;gt; (تعديل من [[ترتيب سريع|الفرز السريع]] (quicksort) من قبل R. S. Scowen) ، والذي تم استخدامه في الأصل لتنفيذه في مكتبة [[يونكس|Unix]] C ، على الرغم من أن معيار C لا يتطلب تنفيذ الفرز السريع. &amp;lt;ref name=&amp;quot;engineering&amp;quot;&amp;gt;{{استشهاد بدورية محكمة|الأول=Jon L.|الأخير=Bentley|الأخير2=McIlroy|المجلد=23|العدد=11|صفحات=1249–1265|سنة=1993|DOI=10.1002/spe.4380231105|صحيفة=Software: Practice and Experience|عنوان=Engineering a sort function|مسار = http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.14.8162|الأول2=M. Douglas|مسار أرشيف= https://web.archive.org/web/20230603043530/https://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.14.8162|تاريخ أرشيف=2023-06-03}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
يتم تحقيق العمل على أنواع مختلفة من البيانات ( &amp;#039;&amp;#039;[[تعددية الأشكال (علم الحاسوب)|تعدد الأشكال]]&amp;#039;&amp;#039;-Polymorphism ) من خلال أخذ [[مؤشر دالة]] إلى دالة مقارنة ، بالإضافة إلى متغير يحدد حجم كائنات الإدخال الفردية الخاصة بها. تتطلب [[أنسي سي|سي المعيارية]] دالة المقارنة لتنفيذ [[ترتيب كلي|الترتيب الكلي]] على العناصر في المصفوفة المٌدخلة. &amp;lt;ref&amp;gt;ISO/IEC 9899:201x, Programming Languages—C (draft). §7.22.5. November 16, 2010.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
على سبيل المثال، يمكن لدالة qsort أن تقوم بترتيب [[بنية بيانات|هيكل بيانات]] &amp;quot;[[رتل (بنية معطيات)|طابور]] الأولويات- priority queue&amp;quot;، المبني على مصفوفة (array) من [[عقدة (حاسوب)|العقد]] التي تضم كل منهم ما يدل على أولويتها و موضعها في الطابور، و التي قد يتم نداءها في نهاية عملية إضافة (إدراج) عقدة جديدة (enqueue)، لوضع كل عقدة في موضعها المناسب في الطابور. في حال استخدام الدالة في تطبيق متشعب، يجب مراعاة التزامن بين شرائط التعليمات التي تحاول الوصول للطابور ذو الأولوية، بحيث تكون عملية إضافة العٌقد [[عملية ذرية]]- غير قابلة للمقاطعة.&lt;br /&gt;
&lt;br /&gt;
يجب ملاحظة ما يلي:&lt;br /&gt;
&lt;br /&gt;
1- لن تصلح دالة qsort لفرز طابور أولويات مبني على هيكل [[قائمة متصلة|القوائم المتصلة]]، حيث أن العٌقد في هذه الحالة غير مختزنة كقطعة متجاورة بالذاكرة كما المصفوفة، بل إن كل عقدة تشير للتي تليها.&lt;br /&gt;
&lt;br /&gt;
2- في حال إدراج عقدة جديدة في طابور الأولويات، يٌفضل أن تبحث العقدة عن موضعها في الطابور بتعقيد زمني &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; بدلاً من إدراجها في نهاية الطابور ثم إجراء عملية الفرز بتعقيد زمني &amp;lt;math&amp;gt;O(n log(n))&amp;lt;/math&amp;gt; ، حيث أن n هو طول الطابور.&lt;br /&gt;
&lt;br /&gt;
== تاريخها ==&lt;br /&gt;
تظهر دالة qsort في [[يونكس مركز البحوث|Version 2 Unix]] في عام 1972 كدالة مكتبية ب&amp;lt;nowiki/&amp;gt;[[لغة التجميع]]. تختلف واجهتها عن الإصدار الحديث ، الذي يمكن أن يكون نموذجها الإعلاني (prototype) مثل &amp;lt;code&amp;gt;&amp;lt;u&amp;gt;qsort(void * start, void * end, unsigned length)&amp;lt;/u&amp;gt;&amp;lt;/code&amp;gt; لترتيب سلاسل نصية بطول &amp;quot;length&amp;quot; من البايتات المخزنة بشكل متصل في الذاكرة من النطاق [ &amp;#039;&amp;#039;&amp;#039;start&amp;#039;&amp;#039;&amp;#039;، &amp;#039;&amp;#039;&amp;#039;end&amp;#039;&amp;#039;&amp;#039;). &amp;lt;ref name=&amp;quot;v2&amp;quot; /&amp;gt; هذا ، وبالإضافة لعدم وجود دالة مقارنة قابلة للاستبدال ، فإن ذلك جعل من غير المناسب فرز [[عدد صحيح (علوم حاسوب)|الأعداد الصحيحة]] [[ترتيب البايتات|ذوات النهاية الأصغر]] (Little-Endian) للنظام بشكل صحيح ، أو أي هياكل بيانات أخرى.&lt;br /&gt;
&lt;br /&gt;
في [[يونكس مركز البحوث|الإصدار 3 من نظام التشغيل Unix]] ، تم توسيع الواجهة عن طريق استدعاء دالة مقارنة. قد يتم تعديل هذه الدالة من قبل المستخدم لتنفيذ أي نوع من الترتيب (تصاعدي/تنازلي) ، بطريقة مكافئة للمُدخل &amp;quot;&amp;lt;code&amp;gt;compar&amp;lt;/code&amp;gt;&amp;quot; لدالة &amp;#039;&amp;#039;&amp;#039;qsort&amp;#039;&amp;#039;&amp;#039; في صورتها المعتمدة. &amp;lt;ref&amp;gt;{{استشهاد ويب|محرر1-وصلة=Ken_Thompson|محرر2-وصلة=Dennis_Ritchie|تاريخ       =February 1973|صفحة        =&amp;quot;qsort(III)&amp;quot;|عنوان       =UNIX Programmer&amp;#039;s Manual, Third Edition|مسار        = https://minnie.tuhs.org/cgi-bin/utree.pl?file=V3/man/man3/qsort.3|ناشر        =[[مختبرات بل|Bell Telephone Laboratories]]|مسار أرشيف= https://web.archive.org/web/20230724162149/https://minnie.tuhs.org/cgi-bin/utree.pl?file=V3/man/man3/qsort.3|تاريخ أرشيف=2023-07-24}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[يونكس مركز البحوث|الإصدار 4 من Unix]] يضيف تنفيذ برمجي بلغة C ، بواجهة مشابهة للمعيار. &amp;lt;ref&amp;gt;{{استشهاد ويب|محرر1-وصلة=Ken_Thompson|محرر2-وصلة=Dennis_Ritchie|تاريخ       =November 1973|صفحة        =&amp;quot;qsort(III)&amp;quot;|عنوان       =UNIX Programmer&amp;#039;s Manual, Fourth Edition|مسار        = https://minnie.tuhs.org/cgi-bin/utree.pl?file=V4/man/man3/qsort.3|ناشر        =[[مختبرات بل|Bell Telephone Laboratories]]|مسار أرشيف= https://web.archive.org/web/20230724162147/https://minnie.tuhs.org/cgi-bin/utree.pl?file=V4/man/man3/qsort.3|تاريخ أرشيف=2023-07-24}}&amp;lt;/ref&amp;gt; تمت إعادة كتابته في عام 1983 لصالح [[توزيعة برمجيات بيركلي|Berkeley Software Distribution]] (BSD) . &amp;lt;ref name=&amp;quot;engineering&amp;quot; /&amp;gt; تم توحيد الدالة في [[أنسي سي|ANSI C]] عام 1989. تمت إزالة الكود البرمجي بلغة التجميع في الإصدار 6 Unix . &amp;lt;ref&amp;gt;{{استشهاد ويب|عنوان=qsort(III), from UNIX Programmer&amp;#039;s Manual, Sixth Edition|مسار = http://minnie.tuhs.org/cgi-bin/utree.pl?file=V6/usr/man/man3/qsort.3|موقع =Unix Archive|مسار أرشيف= https://web.archive.org/web/20230225015936/https://minnie.tuhs.org/cgi-bin/utree.pl?file=V6/usr/man/man3/qsort.3|تاريخ أرشيف=2023-02-25}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
في عام 1991 ، لاحظ موظفو Bell Labs أن إصدارات AT&amp;amp;T و BSD من qsort تستهلك [[تعقيد الوقت|وقتاً تربيعياً]] لبعض المدخلات البسيطة. وهكذا صمم [[جون بنتلي (عالم حاسوب)|جون بنتلي]] [[دوغلاس ماكلروي|ودوغلاس ماكلروي]] تطبيقًا جديدًا أسرع وأكثر قوة. &amp;lt;ref name=&amp;quot;engineering&amp;quot; /&amp;gt; أنتج McIlroy لاحقًا مدخلات تربيعية أكثر تعقيدًا ، تسمى &amp;#039;&amp;#039;AntiQuicksort&amp;#039;&amp;#039; ، في عام 1998. &amp;lt;ref&amp;gt;{{استشهاد بدورية محكمة|الأخير=McIlroy|الأول=M. D.|المجلد=29|صفحات=341–344|DOI=10.1002/(SICI)1097-024X(19990410)29:4&amp;lt;341::AID-SPE237&amp;gt;3.0.CO;2-R|العدد=4|صحيفة=Software—Practice &amp;amp; Experience|تاريخ=10 April 1999|عنوان=A killer adversary for quicksort|مسار = https://www.cs.dartmouth.edu/~doug/mdmspe.pdf|مسار أرشيف= https://web.archive.org/web/20230619014319/https://www.cs.dartmouth.edu/~doug/mdmspe.pdf|تاريخ أرشيف=2023-06-19}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== مثال ==&lt;br /&gt;
يوضح الكود التالي بلغة C كيفية ترتيب مصفوفة من الأعداد الصحيحة باستخدام دالة qsort : &amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/* Comparison function. Receives two generic (void) pointers to the items under comparison. */&lt;br /&gt;
int compare_ints(const void *p, const void *q) {&lt;br /&gt;
    int x = *(const int *)p;&lt;br /&gt;
    int y = *(const int *)q;&lt;br /&gt;
&lt;br /&gt;
    /* Avoid return x - y, which can cause undefined behaviour&lt;br /&gt;
       because of signed integer overflow. */&lt;br /&gt;
    if (x &amp;lt; y)&lt;br /&gt;
        return -1;  // Return -1 if you want ascending, 1 if you want descending order. &lt;br /&gt;
    else if (x &amp;gt; y)&lt;br /&gt;
        return 1;   // Return 1 if you want ascending, -1 if you want descending order.&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
    // All the logic is often alternatively written:&lt;br /&gt;
    return (x &amp;gt; y) - (x &amp;lt; y);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Sort an array of n integers, pointed to by a. */&lt;br /&gt;
void sort_ints(int *a, size_t n) {&lt;br /&gt;
    qsort(a, n, sizeof(*a), compare_ints);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;small&amp;gt;ملحقات&amp;lt;/small&amp;gt; ==&lt;br /&gt;
نظرًا لأن دالة المقارنة مثل &amp;quot;compare_ints&amp;quot; الخاصة بـ &amp;lt;code&amp;gt;qsort&amp;lt;/code&amp;gt; لا تقبل سوى مؤشرين ، فإن تمرير معلمات إضافية (على سبيل المثال: دالة مقارنة تقارن الفرق بين القيمتين المشار لهما بالمؤشرين الممرين للدالة نفسها مع قيمة أخرى) يجب أن يتم تكون القيمة الأخرى لمتغير من المتغيرات العامة (global variables). تم حل المشكلة بواسطة أنظمة [[توزيعة برمجيات بيركلي|BSD]] و[[جنو|GNU]] [[شبيه يونكس|الشبيهة بـ Unix]] من خلال إدخال وظيفة &amp;lt;code&amp;gt;qsort_r&amp;lt;/code&amp;gt; ، والتي تسمح بتمرير معلمة إضافية إلى وظيفة المقارنة. الإصداران من &amp;lt;code&amp;gt;qsort_r&amp;lt;/code&amp;gt; لهما أوامر وسيطة مختلفة. يعرّف C11 الملحق K &amp;lt;code&amp;gt;qsort_s&amp;lt;/code&amp;gt; بشكل أساسي مطابق لـ &amp;lt;code&amp;gt;qsort_r&amp;lt;/code&amp;gt; الخاص بـ GNU.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;#039;&amp;#039;&amp;#039;مراجع&amp;#039;&amp;#039;&amp;#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
{{مراجع}}&lt;br /&gt;
&lt;br /&gt;
{{مقالات بحاجة لشريط بوابات}}&lt;br /&gt;
&lt;br /&gt;
[[تصنيف:خوارزميات ترتيب]]&lt;br /&gt;
[[تصنيف:مكتبة سي المعيارية]]&lt;br /&gt;
[[تصنيف:صفحات بترجمات غير مراجعة]]&lt;/div&gt;</summary>
		<author><name>عبد العزيز</name></author>
	</entry>
</feed>