C++ Academy · درس

الفرز والتقسيم: ‏sort وstable_partition

افرز الحاويات وقسّمها باستخدام std::sort وstd::stable_partition.

الدرس 3 من 413 خطوة

الفرز والتقسيم: ‏sort وstable_partition درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.

std::sort

خوارزمية الفرز الأساسية. التعقيد المتوسط O(N log N). تعمل موضعيًا. ولا تضمن الاستقرار.

#include <algorithm>
std::vector<int> v = {3, 1, 4, 1, 5, 9, 2, 6};
std::sort(v.begin(), v.end());
// v is sorted ascending

مقارن مخصص

مرّر مقارنًا (لامبدا أو functor) لإجراء الفرز وفق معايير أخرى.

std::sort(v.begin(), v.end(),
    [](int a, int b) { return a > b; });   // descending

فرز الأنواع المخصصة

قدّم مقارنًا يقارن أعضاء محددين، أو عرّف operator< للنوع.

struct Person { std::string name; int age; };
std::vector<Person> people;
std::sort(people.begin(), people.end(),
    [](const Person& a, const Person& b) { return a.age < b.age; });

std::stable_sort

مثل sort، لكنها تحافظ على الترتيب النسبي للعناصر المتساوية. أبطأ قليلًا، وعادةً ما تتطلب ذاكرة إضافية O(N log^2 N).

std::partial_sort

ضع أصغر عناصر k أولًا بترتيب فرز. تكون العناصر المتبقية بترتيب غير محدد. وهي أسرع من الفرز الكامل عندما تحتاج فقط إلى أعلى k من العناصر.

std::vector<int> v = {5, 2, 8, 1, 9, 3};
std::partial_sort(v.begin(), v.begin() + 3, v.end());
// first 3 elements are the smallest, sorted

std::nth_element

قسّم النطاق بحيث يكون العنصر عند الموضع nth هو العنصر الذي سيقع في ذلك الموضع ضمن نطاق مرتب بالكامل. كل ما قبله ≤ nth، وكل ما بعده ≥. التعقيد المتوسط O(N).

std::nth_element(v.begin(), v.begin() + 2, v.end());
// v[2] is the 3rd smallest element

std::is_sorted

تحقّق مما إذا كان النطاق مرتبًا مسبقًا.

if (std::is_sorted(v.begin(), v.end())) {
    std::cout << "already sorted";
}

std::partition

أعد ترتيب النطاق بحيث تأتي العناصر التي تحقق دالة شرطية أولًا. تعيد الخوارزمية المكرّر الذي يشير إلى أول عنصر لا يحقق الشرط. ولا تحافظ على الاستقرار.

std::vector<int> v = {1, 2, 3, 4, 5};
auto pivot = std::partition(v.begin(), v.end(),
    [](int x) { return x % 2 == 0; });
// even numbers come first, then odd

std::stable_partition

مثل partition، لكنها تحافظ على الترتيب النسبي داخل كل مجموعة.

الفرز وفق مفاتيح متعددة

استخدم مقارنًا يقارن المفتاح الأساسي، ثم المفتاح الثانوي إذا تساوى المفتاح الأساسي.

std::sort(people.begin(), people.end(),
    [](const Person& a, const Person& b) {
        if (a.age != b.age) return a.age < b.age;
        return a.name < b.name;
    });

البحث الثنائي في النطاقات المرتبة

بعد الفرز، استخدم std::lower_bound وstd::upper_bound وstd::binary_search لإجراء عمليات بحث بتعقيد O(log N).

اختبار سريع

أي خوارزمية تحافظ على الترتيب النسبي للعناصر المتساوية بعد الفرز؟

مراجعة

استخدم std::sort للفرز العام، وstd::stable_sort عندما يكون ترتيب العناصر المتساوية مهمًا، وstd::partial_sort للحصول على أعلى k من العناصر، وstd::nth_element للاختيار، وstd::partition/std::stable_partition للتجميع.

البدء مجانًا

تعلم C++ مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
51
الدروس
203

الأسئلة الشائعة

هل درس «الفرز والتقسيم: ‏sort وstable_partition» مجاني؟

نعم — نص درس «الفرز والتقسيم: ‏sort وstable_partition» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.

ماذا ستتعلم في «الفرز والتقسيم: ‏sort وstable_partition»؟

افرز الحاويات وقسّمها باستخدام std::sort وstd::stable_partition. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟

لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «الفرز والتقسيم: ‏sort وstable_partition»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟

نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. الخوارزميات غير المعدِّلة: ‏find وcount وall_of
  2. الخوارزميات المعدِّلة: ‏transform وcopy_if وreplace
  3. الفرز والتقسيم: ‏sort وstable_partition
  4. الخوارزميات الرقمية: ‏accumulate وreduce وtransform_reduce
← العودة إلى C++ Academy