فرز هي واحدة من أكثر الوظائف الأساسية والمفيدة المطبقة على البيانات. يهدف إلى ترتيب البيانات بطريقة معينة ، والتي يمكن أن تتزايد أو تنقص حسب المتطلبات. توجد وظيفة مضمنة في C ++ STL باسم 'sort ()' والتي تتيح لنا إجراء خوارزمية الفرز بسهولة. في هذه المقالة سوف نستكشف وظيفة الفرز في C ++ ،
سيتم تغطية المؤشرات التالية في هذه المقالة:
خوارزميات التعلم الآلي في r
المضي قدما مع هذه المقالة على وظيفة الفرز في C ++
فرز ( ) وظيفة
إنها وظيفة مضمنة في ملف رأس الخوارزمية يتم استخدامها لفرز الحاويات مثل المصفوفة والمتجهات بترتيب محدد. داخليا يتم تنفيذ هذه الوظيفة على أنها فرز سريع
Quicksort هي خوارزمية فرق تسد. يقسم Quicksort أولاً قائمة كبيرة من العناصر إلى قائمتين فرعيتين أصغر: العناصر السفلية والعناصر الأعلى. Quicksort ثم فرز القوائم الفرعية بشكل متكرر.
والخطوات هي كما يلي:
1. اختر عنصرًا عشوائيًا (عادةً العنصر الأخير) ، يُسمى المحور ، من القائمة.
2. أعد ترتيب القائمة بحيث تأتي جميع العناصر ذات القيم الأقل من المحور قبل المحور ، في حين أن جميع العناصر ذات القيم الأكبر من المحور تأتي بعدها ، ويمكن أن تذهب القيم المتساوية في أيٍ من الاتجاهين ، وتسمى هذه العملية عملية التقسيم.
3. قم بفرز القائمة الفرعية للعناصر الأقل أهمية والقائمة الفرعية للعناصر الأكبر بشكل متكرر ، وحدد مرة أخرى محوريًا في القائمة الفرعية وقسمها.
الحالة الأساسية للتكرار هي قوائم بحجم صفر أو واحد ، والتي لا تحتاج أبدًا إلى الفرز ، وبالتالي من خلال الجمع بينها نقوم بفرز قائمتنا.
يعتبر Quicksort أسرع في الممارسة العملية من خوارزميات O (n log n) الأخرى مثل Insertion Sort أو Bubble Sort. يمكن تنفيذ Quicksort باستخدام خوارزمية التقسيم الموضعي مما يعني أنه يمكن إجراء الفرز بأكمله بمساحة إضافية O (log n) فقط. Quicksort ليس نوعًا مستقرًا.
تعقيدها كما يلي:
أفضل حالة - O (n log n)
أسوأ حالة - O (n ^ 2)
متوسط الحالة - O (n log n)
بناء الجملة:
فرز (أولًا ، أخيرًا)
هنا،
الأول - هو مؤشر (المؤشر) للعنصر الأول في النطاق المراد فرزه.
last - هو مؤشر (المؤشر) للعنصر الأخير في النطاق المراد فرزه.
على سبيل المثال ، نريد فرز عناصر المصفوفة 'arr' من 1 إلى 10 موضعًا ، وسنستخدم الترتيب (arr ، arr + 10) وسنفرز 10 عناصر بترتيب تصاعدي.
قيمة الإرجاع
لا شيء
تعقيد
متوسط تعقيد الفرز هو N * log2 (N) ، حيث N = الأخير - أولاً.
نطاق البيانات
تم تعديل الكائن في النطاق [الأول والأخير).
استثناءات
زيادة التحميل مع معلمة قالب تسمى أخطاء تقرير ExecutionPolicy على النحو التالي:
إذا فشلت الخوارزمية في تخصيص الذاكرة ، فسيتم طرح std :: bad_alloc كاستثناء.
إذا تم استدعاء تنفيذ دالة كجزء من الخوارزمية ، فإنه يطرح استثناءً std :: terminate.
المضي قدما مع هذه المقالة على وظيفة الفرز في C ++
مثال - لفرز البيانات بترتيب تصاعدي:
# تضمين باستخدام مساحة الاسم std int main () {int array [] = {10، 35، 85، 93، 62، 77، 345، 43، 2، 10} int n = sizeof (array) / sizeof (array [0] ) // 'sizeof' يعطي حجم المصفوفة الإجمالية أي حجم كل حرف * لا. من الشخصيات // حتى تحصل على لا. من الأحرف // نقسم حجم (مصفوفة) على حجم أي حرف واحد من المصفوفة // هنا هي مصفوفة [0] فرز (مصفوفة ، مصفوفة + ن) cout<< 'nArray after sorting using ' 'default sort is : n' for (int i = 0 i < n ++i) cout << array[i] << ' ' return 0 }
انتاج :
تفسير
من المثال أعلاه ، نرى أن دالة sort () تقوم بشكل افتراضي بفرز مصفوفة بترتيب تصاعدي.
المضي قدما مع هذه المقالة على وظيفة الفرز في C ++
مثال - لفرز البيانات بترتيب تنازلي:
لفرز بيانات المصفوفة بترتيب تنازلي ، نحتاج إلى إدخال معامل ثالث يتم استخدامه لتحديد الترتيب الذي سيتم فرز العناصر به. يمكننا استخدام وظيفة 'أكبر ()' لفرز البيانات بترتيب تنازلي.
# تضمين باستخدام مساحة الاسم std int main () {int array [] = {41، 53، 4، 459، 60، 7، 23، 4، 232، 10} int n = sizeof (array) / sizeof (array [0] ) فرز (صفيف ، صفيف + n ، أكبر ()) cout<< 'Array after sorting : n' for (int i = 0 i < n ++i) cout << array[i] << ' ' return 0 }
انتاج:
إكسب ل أمة
هنا تقوم دالة sort () بإجراء مقارنة بطريقة تضع عنصرًا أكبر من قبل.
المضي قدما مع هذه المقالة على وظيفة الفرز في C ++
فرز_جزئي
توفر لنا C ++ STL وظيفة فرز جزئية ، والوظيفة مشابهة لوظيفة الفرز () ولكن بخلاف وظيفة الفرز () ، لا يتم استخدامها لفرز النطاق بأكمله ، بل يتم استخدامها لفرز جزء فرعي منه فقط. يقوم بفرز العناصر في النطاق [الأول ، الأخير) ، بحيث يتم فرز العناصر الموجودة قبل العنصر الأوسط بترتيب تصاعدي ، بينما تُترك العناصر بعد الوسط كما هي.
يمكن استخدامه للعثور على أكبر عنصر إذا استخدمنا كائن دالة لفرز الموضع الأول
مثال
#include #include # include using namespace std int main () {vector vec = {10، 45، 60، 78، 23، 21، 30} vector :: iterator iptr auction_sort (vec.begin ()، vec.begin () + 1 ، vec.end () ، أكبر ()) iptr = vec.begin () cout<< 'The largest element is = ' << *iptr return 0 }
انتاج:
تفسير:
يمكن استخدام الكود أعلاه للعثور على أكبر رقم في سلسلة ، للعثور على أصغر رقم في السلسلة نحتاج فقط لإزالة الأمر الأكبر.
القائمة المنسدلة في angularjs
وهكذا وصلنا إلى نهاية هذه المقالة حول 'Sort Function في C ++'. إذا كنت ترغب في معرفة المزيد ، تحقق من Java Training بواسطة Edureka ، وهي شركة تعليمية موثوقة عبر الإنترنت. إديوريكا تم تصميم الدورة التدريبية لتدريبك على مفاهيم Java الأساسية والمتقدمة جنبًا إلى جنب مع العديد من أطر Java مثل Hibernate & Spring.
لديك سؤال لنا؟ يرجى ذكر ذلك في قسم التعليقات في هذه المدونة وسنعاود الاتصال بك في أقرب وقت ممكن.