يوضح هذا المبدأ التوجيهي فرز المصفوفات باستخدام qsort () تعمل في C وتساعدك أيضًا على فهمها من خلال أكواد المثال C.
qsort () في C.
مكتبة C القياسية تسهل علينا qsort () وظيفة تستخدم ببساطة لفرز المصفوفات. إنها وظيفة محسّنة وسريعة للغاية يمكن أن تعمل مع أي مجموعة من أنواع البيانات.
ملف الرأس باستخدام qsort () في C
ال qsort () يتم تعريف الطريقة داخل stdlib.h header والذي يجب تحديده قبل التنفيذ qsort () في برنامج C.
# تضمين
إعلان qsort ()
إعلان qsort () الوظيفة على النحو التالي:
فارغ qsort ( فارغ * قاعدة و عدد_العناصر و حجم_العنصر و وظيفة المقارنة )
معلمات دالة qsort ()
معلمات qsort () الوظيفة هي:
قاعدة: المؤشر إلى العنصر الأول من المصفوفة المراد فرزها.
عدد_العناصر: عدد العناصر في المصفوفة المراد فرزها.
حجم_العنصر: الحجم بالبايت لكل عنصر في المصفوفة.
مقارنة_وظيفة: مؤشر إلى دالة مقارنة تحدد ترتيب العناصر.
ما هي وظيفة المقارنة في qsort ()
تأخذ وظيفة المقارنة معلمتين ، كلاهما من النوع const void * ، مما يشير إلى العناصر التي تتم مقارنتها. يجب أن تُرجع الدالة عددًا صحيحًا أقل من أو يساوي أو أكبر من 0 ، اعتمادًا على ما إذا كان يجب فرز العنصر الأول قبل العنصر الثاني أو في نفس الموضع أو بعده ، على التوالي.
كيف يعمل qsort في C
ال qsort () تعمل الوظيفة بالطريقة التالية:
ملحوظة: نحن هنا نفكر في ملف int arr [] = {5، 2، 8، 3، 1، 9} ؛
1: في البداية ، سيتم استدعاء وظيفة qsort بالمعلمات التالية:
qsort ( آر و 6 و حجم ( int ) و وظيفة المقارنة ) ؛حيث arr هو مؤشر المصفوفة ، 6 هو عدد العناصر في المصفوفة ، sizeof (int) هو حجم كل عنصر في المصفوفة ، ودالة المقارنة هي الوظيفة التي تحدد الترتيب الذي يتم به فرز العناصر.
2: تحدد وظيفة qsort عنصرًا محوريًا. لنفترض أنه يختار 3 كمحور.
3: تقسم الدالة qsort المصفوفة إلى صفيفتين فرعيتين: {2 ، 1} و {5 ، 8 ، 9}. تحتوي المصفوفة الفرعية الأولى على عناصر أقل من المحور أو مساوية له ، بينما تحتوي المصفوفة الفرعية الثانية على عناصر أكبر من المحور.
4: تستدعي الدالة qsort نفسها بشكل متكرر على كل من المصفوفات الفرعية.
5: تحدد وظيفة qsort المحاور لكل من المصفوفات الفرعية. لنفترض أنه حدد 1 و 8 كمحور.
6: تقسم وظيفة qsort كل مصفوفة فرعية إلى صفيفتين فرعيتين ، وتستدعي نفسها بشكل متكرر على كل من هذه المصفوفات الفرعية.
7: تدمج وظيفة qsort المصفوفات الفرعية التي تم فرزها مرة أخرى في مصفوفة مرتبة واحدة: {1 ، 2} و {5 ، 8 ، 9} تصبح {1 ، 2 ، 5 ، 8 ، 9}.
8: يتم إرجاع المصفوفة التي تم فرزها بالكامل.
تنفيذ qsort في البرمجة سي
يوضح الكود التالي تنفيذ qsort تعمل في برمجة C.
# تضمين# تضمين
int يقارن ( مقدار ثابت فارغ * أ 1 و مقدار ثابت فارغ * ب 1 )
{
يعود ( * ( int * ) أ 1 - * ( int * ) ب 1 ) ؛
}
int رئيسي ( )
{
int أنا = 0 و على واحد = 6 ؛
int مجموعة مصفوفة [ ] = { 5 و 2 و 8 و 3 و 1 و 9 } ؛
qsort ( مجموعة مصفوفة و على واحد و حجم ( int ) و يقارن ) ؛
printf ( 'العناصر المصنفة للصفيف باستخدام qsort () هي:' ) ؛
ل ( أنا = 0 ؛ أنا < على واحد ؛ أنا ++ ) {
printf ( '٪د ' و مجموعة مصفوفة [ أنا ] ) ؛ }
يعود 0 ؛
}
في الكود أعلاه ، يتم أولاً إجراء وظيفة مقارنة مع معلمتين أ 1 و ب 1 . ثم يبدأ التنفيذ من main (). في الأساس ، نقوم بتهيئة متغيرين صحيحين مثل i = 0 و num = 6. ثم نعلن أن مصفوفة مكونة من ستة عناصر هي {5 ، 2 ، 8 ، 3 ، 1 ، 9} . بعد هذا qsort () تحتوي على ثلاث معلمات من نوع المصفوفة ، تخبر المعلمة num إجمالي عناصر المصفوفة ، sizeof (int) يشير إلى الحجم الإجمالي للمصفوفة ، وتستخدم المقارنة لمقارنة عناصر المصفوفة واحدًا تلو الآخر. ثم اطبع المصفوفة التي تم فرزها باستخدام printf () تعمل في C.
انتاج |
خاتمة
qsort هي وظيفة قوية في برمجة C لفرز المصفوفات من أي نوع. يستخدم خوارزمية الفرز السريع لفرز العناصر بترتيب تصاعدي أو تنازلي بناءً على وظيفة المقارنة. يوضح لك الدليل أعلاه طريقة سهلة لتنفيذ qsort في برمجة C من خلال العمل خطوة بخطوة qsort الخوارزمية.