الانتقال إلى المحتوى الرئيسي

برنامج لفرز النصف الأول من المصفوفة بترتيب تصاعدي والثاني بترتيب تنازلي: الحل

  • زاخر بنو الأحمر بن الحارث
  • المدونة

يعد فرز المصفوفة إحدى العمليات الأساسية في البرمجة. تتطلب المهام أحيانا فرز المصفوفة بطريقة يتم فيها ترتيب النصف الأول بترتيب تصاعدي والنصف الثاني بترتيب تنازلي. يمكن أن يكون هذا مفيدا ، على سبيل المثال ، للعثور على وسيط مصفوفة ، أو لحل مشكلة معينة.

دعونا نفكر في حل بسيط لمثل هذه المشكلة في لغة برمجة بايثون. لفرز النصف الأول من المصفوفة بترتيب تصاعدي ، استخدم الدالة القياسية المصنفة (). لفرز النصف الثاني بترتيب تنازلي ، قم بإنشاء قائمة جديدة ، وعكسها باستخدام الطريقة العكسية (). ثم اجمع بين النصف الأول المصنف والنصف الثاني المقلوب في مصفوفة نهائية مرتبة.

أر [منتصف:] = مرتبة (أر [منتصف:] ، عكس = صحيح)

  1. طباعة (آر)
  2. ستكون نتيجة تنفيذ البرنامج: [1, 2, 3, 5, 4]. يمكن ملاحظة أن النصف الأول من المصفوفة [1 ، 2] يتم فرزه بترتيب تصاعدي ، والنصف الثاني [5 ، 4] يتم فرزه بترتيب تنازلي.
  3. وبالتالي ، بمساعدة رمز برنامج صغير ، يمكنك حل مشكلة فرز النصف الأول من المصفوفة بترتيب تصاعدي والثاني بترتيب تنازلي. يمكن استخدام هذا النهج في مهام مختلفة عند الحاجة إلى الفرز بشروط معينة.
  4. برنامج لفرز صفيف
  5. خوارزمية فرز الصفيف

مثال على استخدام البرنامج

سؤال وجواب

كيف يمكنني كتابة برنامج لفرز النصف الأول من مجموعة في ترتيب تصاعدي والثاني في ترتيب تنازلي?

هل من الممكن استخدام خوارزمية دمج الفرز لحل هذه المشكلة?

  1. ما هي خوارزميات الفرز الأخرى التي يمكن استخدامها لحل هذه المشكلة?
  2. برنامج لفرز صفيف
  3. يعد فرز الصفيف أحد الخوارزميات الأساسية في البرمجة. يسمح لك بترتيب عناصر المصفوفة وفقا لمعيار معين ، مثل تصاعدي أو تنازلي.
  4. هناك العديد من خوارزميات الفرز المختلفة ، لكل منها مزاياها وعيوبها اعتمادا على تفاصيل المهمة. واحدة من أبسط الخوارزميات وأكثرها قابلية للفهم هي فرز الفقاعات. على سبيل المثال ، سيتم استخدام هذه الخوارزمية المعينة في هذه المقالة.

خطوات خوارزمية فرز الفقاعة:

عرض جميع عناصر المصفوفة مع فهرس من 0 إلى ن-1 ، أين ن هو طول المصفوفة.

قارن كل عنصر بالعناصر المجاورة له.

إذا كان العنصر الحالي أكبر من العنصر التالي ، فقم بتبديله.

كرر الخطوات من 1 إلى 3 حتى يتم فرز المصفوفة بالكامل.

برنامج لفرز مصفوفة بترتيب تصاعدي:

باطلة بابليسورت (كثافة العمليات[] آر) {

الباحث ن = آر.الطول;

تبادلت منطقية;

إلى عن على (كثافة العمليات أنا = 0 ؛ أنا < ن - 1 ؛ أنا {) {

تبديل = خطأ;

إلى عن على (الباحث ي = 0 ؛ ي < ن - ط - 1 ؛ ي++) {

إذا (أر [ي] > أر [ي + 1]) {

إنت تيمب = أر [ي];

أر[ي] = أر [ي + 1];

أر [ي + 1] = درجة الحرارة;

تبادلت = صحيح;

}

}

if (!swapped)

break;

}

}

Программа для сортировки массива по убыванию:

void bubbleSort(int[] arr) {

int n = arr.length;

boolean swapped;

for (int i = 0; i < n - 1; i++) {

swapped = false;

for (int j = 0; j < n - i - 1; j++) {

if (arr[j] < arr[j + 1]) {

int temp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = temp;

swapped = true;

}

}

if (!swapped)

break;

}

}

  1. В обоих программах используется алгоритм сортировки пузырьком. والفرق الوحيد هو في حالة المقارنة. في الحالة الأولى ، تتم مقارنة عناصر المصفوفة بالفرز بترتيب تصاعدي ، وفي الحالة الثانية ، للفرز بترتيب تنازلي. إذا كانت عناصر المصفوفة بحاجة إلى الفرز حسب معيار مختلف ، فيجب تغيير حالة المقارنة داخل الحلقة وفقا لذلك.
  2. الآن أنت تعرف كيفية كتابة برنامج لفرز مصفوفة باستخدام خوارزمية فرز الفقاعات. يمكن أن يكون هذا المثال بمثابة نقطة انطلاق لمزيد من الدراسة لخوارزميات الفرز الأخرى وتطبيقاتها.
  3. خوارزمية فرز الصفيف

فرز المصفوفة هو عملية ترتيب عناصر المصفوفة بترتيب معين. واحدة من خوارزميات الفرز الأكثر شيوعا هي خوارزمية فرز الفقاعة.

خوارزمية فرز الفقاعات:

قارن بين عنصرين متجاورين من الصفيف.

إذا كانت العناصر في ترتيب خاطئ ، ونحن مبادلة لهم.

نذهب من خلال مجموعة مرارا وتكرارا حتى يتم ترتيب جميع العناصر.

يمكن تمثيل خوارزمية فرز الفقاعة بالكود الكاذب التالي:

وظيفة بوبليسورت(آر):

ن = الطول (آر)

لأني من 0 إلى ن-1:

ل ي من 0 إلى ن ط 1:

إذا أر[ي] > أر [ي + 1]:

مقايضة (ر [ي] ، ر [ي + 1])

تمر هذه الخوارزمية عبر المصفوفة عدة مرات ، وتقارن العناصر وتحركها حتى يتم ترتيب جميع العناصر. ونتيجة لذلك ، فإن أصغر عنصر "يطفو على السطح" إلى المقام الأول ، والأكبر إلى الأخير.

من السهل تنفيذ خوارزمية فرز الفقاعات ، لكن فعاليتها تعتمد على عدد العناصر في المصفوفة. لديها تعقيد ا (ن^2) ، مما يعني أن وقت تنفيذ الخوارزمية يزداد تربيعيا مع زيادة حجم الصفيف. وبالتالي ، قد لا يكون فرز الفقاعات فعالا للمصفوفات الكبيرة.

مثال على استخدام البرنامج

لتوضيح عملية البرنامج ، ضع في اعتبارك المثال التالي:

لنفترض أن لدينا مجموعة من الأرقام:

[7, 3, 9, 5, 1]

دعونا تشغيل البرنامج وتمرير هذه المصفوفة إليها:

سورتاراي([7, 3, 9, 5, 1]);

نتيجة البرنامج:

سيتم فرز النصف الأول من المصفوفة بترتيب تصاعدي:

[1, 3, 7, 5, 9]

سيتم فرز النصف الثاني من المصفوفة بترتيب تنازلي:

[9, 7, 5, 3, 1]

ستكون المصفوفة النهائية المصنفة:

[1, 3, 7, 9, 9, 7, 5, 3, 1]

وهكذا ، قام البرنامج بفرز النصف الأول من المصفوفة بترتيب تصاعدي والنصف الثاني من المصفوفة بترتيب تنازلي ، ودمج النتائج في مصفوفة واحدة مرتبة.

سؤال وجواب

كيف يمكنني كتابة برنامج لفرز النصف الأول من مجموعة في ترتيب تصاعدي والثاني في ترتيب تنازلي?