خوارزمية فرز الفقاعات في لغات C وJava وPython

آخر تحديث: 30 دي دي noviembre 2025
نبذة عن الكاتب: تكنوديجيتال
  • خوارزمية بسيطة ومستقرة تقوم بالفرز عن طريق مقارنة العناصر المتجاورة وتبادلها، وهي مثالية لتعلم الأساسيات.
  • تعقيدها هو O(n^2)، لذا فهي غير فعالة على المجموعات الكبيرة وتؤدي العديد من المقارنات غير الضرورية.
  • وقد تم عرض تنفيذه في لغات C وJava وPython؛ وتوجد بدائل أكثر كفاءة مثل quicksort وmergesort لمجموعات البيانات الأكبر.
خوارزمية فرز الفقاعات

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

سنركز في هذه المقالة على تطبيق خوارزمية فرز الفقاعات في لغتي برمجة شائعتين: C و Java. سنستعرض الخطوات اللازمة لتطبيق هذه الخوارزمية في كلتا اللغتين، مع تحليل الكود المصدري وتقديم شروحات مفصلة.

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

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

كيف تعمل خوارزمية فرز الفقاعات في C و Java؟

تتبع خوارزمية فرز الفقاعات نهجًا بسيطًا ولكنه فعال لفرز العناصر. يظهر أدناه التشغيل العام للخوارزمية:

  1. نبدأ بقائمة غير مرتبة من العناصر.
  2. نقوم بتكرار القائمة، ومقارنة كل زوج من العناصر المتجاورة.
  3. إذا كان ترتيب العناصر خاطئًا، نقوم بتبديلها.
  4. نستمر في تكرار القائمة حتى يتم فرزها بالكامل.
  5. يتم تكرار عملية التكرار عدة مرات حسب الضرورة حتى لا يتم إجراء أي تبديلات أخرى في تمريرة كاملة.

تنفيذ خوارزمية فرز الفقاعات بلغة سي

فيما يلي، نعرض تطبيق خوارزمية فرز الفقاعات بلغة C :

#include <stdio.h>

void bubbleSort(int array[], int size) {
    for (int i = 0; i < size - 1; i++) {
        for (int j = 0; j < size - i - 1; j++) {
            if (array[j] > array[j + 1]) {
                int temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
            }
        }
    }
}

int main() {
    int array[] = {64, 34, 25, 12, 22, 11, 90};
    int size = sizeof(array) / sizeof(array[0]);
    bubbleSort(array, size);
    printf("Array ordenado: ");
    for (int i = 0; i < size; i++) {
        printf("%d ", array[i]);
    }
    return 0;
}

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

  تحليل الأغاني الناجحة على سبوتيفاي: البيانات والخوارزميات وعلم النجاح الموسيقي

وأخيرا، في الوظيفة mainلقد قمنا بإنشاء مصفوفة مثال وحسبنا حجمها. ثم نستدعي الدالة bubbleSort تمرير المصفوفة وحجمها كوسائط. وأخيرًا، نقوم بطباعة المصفوفة المفرزة على الشاشة.

تنفيذ خوارزمية فرز الفقاعات في جافا

نقدم أدناه تنفيذ خوارزمية فرز الفقاعات في لغة Java:

import java.util.Arrays;

public class BubbleSort {
    public static void bubbleSort(int[] array) {
        int size = array.length;
        for (int i = 0; i < size - 1; i++) {
            for (int j = 0; j < size - i - 1; j++) {
                if (array[j] > array[j + 1]) {
                    int temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                }
            }
        }
    }

    public static void main(String[] args) {
        int[] array = {64, 34, 25, 12, 22, 11, 90};
        bubbleSort(array);
        System.out.println("Array ordenado: " + Arrays.toString(array));
    }
}

في هذا الكود قمنا بتعريف فئة تسمى BubbleSort. داخل هذه الفئة، أعلنا عن طريقة ثابتة تسمى bubbleSort الذي يأخذ مصفوفة كمعلمة. الطريقة bubbleSort يقوم بتنفيذ خوارزمية فرز الفقاعات باستخدام حلقتين for، تمامًا كما هو الحال في تنفيذ C.

في الطريقة mainلقد قمنا بإنشاء مصفوفة مثال واستدعينا الطريقة bubbleSort تمرير المصفوفة كحجة. وأخيرا، نستخدم Arrays.toString(array) لطباعة المصفوفة المصنفة على وحدة التحكم.

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

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

def bubble_sort(array):
    size = len(array)
    for i in range(size - 1):
        for j in range(size - i - 1):
            if array[j] > array[j + 1]:
                array[j], array[j + 1] = array[j + 1], array[j]

array = [64, 34, 25, 12, 22, 11, 90]
bubble_sort(array)
print("Array ordenado:", array)


 

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

تتمتع خوارزمية فرز الفقاعات ببعض المزايا، مثل:

  1. سهولة:تعتبر خوارزمية فرز الفقاعات سهلة الفهم والتنفيذ. لا يتطلب معرفة معقدة ومناسب للمبتدئين في البرمجة.
  2. تعقيد الكود منخفض:الرمز المطلوب لتنفيذ خوارزمية فرز الفقاعات قصير وموجز نسبيًا. وهذا يجعل من هذا خيارًا سريعًا لفرز عدد صغير من العناصر.

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

على الرغم من بساطتها، فإن خوارزمية فرز الفقاعات لها أيضًا بعض العيوب:

  1. عدم الكفاءة في مجموعات البيانات الكبيرة:خوارزمية فرز الفقاعات ليست فعالة من حيث وقت التنفيذ عند التعامل مع مجموعات كبيرة من البيانات. تعقيدها الزمني هو O(n^2)، مما يعني أن وقت التنفيذ يزداد بسرعة مع زيادة حجم مجموعة البيانات.
  2. عدد المقارنات:تنفذ خوارزمية فرز الفقاعات عددًا كبيرًا من المقارنات، حتى عندما يتم فرز المصفوفة بالفعل. قد يؤدي هذا إلى خسارة غير ضرورية للأداء والموارد.
  طريقة السمبلكس: الدليل الكامل والتطبيقات

بدائل لخوارزمية فرز الفقاعات

مع تزايد حجم مجموعات البيانات وتعقيدها، من المهم النظر في بدائل أكثر كفاءة لخوارزمية فرز الفقاعات. تتضمن بعض البدائل الشائعة ما يلي:

  1. خوارزمية الفرز بالإدراج:تقوم هذه الخوارزمية بتقسيم القائمة إلى جزء مرتب وجزء غير مرتب، وتقوم بإدراج كل عنصر من الجزء غير المرتب في الموضع الصحيح داخل الجزء المرتب. إنها تتمتع بتعقيد زمني يبلغ O(n^2) في أسوأ الحالات، ولكنها أكثر كفاءة من خوارزمية فرز الفقاعات في معظم الحالات.
  2. خوارزمية فرز الاختيار:تقوم هذه الخوارزمية بتقسيم القائمة إلى جزء مرتب وجزء غير مرتب، وتختار بشكل متكرر أصغر عنصر من الجزء غير المرتب وتضعه في نهاية الجزء المرتب. إنها تتمتع بتعقيد زمني يبلغ O(n^2) في أسوأ الحالات، ولكنها أيضًا أكثر كفاءة من خوارزمية فرز الفقاعات في معظم الحالات.

الأسئلة الشائعة حول خوارزمية الفقاعات

1. ما هي التعقيد الزمني لخوارزمية فرز الفقاعات؟

تتمتع خوارزمية فرز الفقاعات بتعقيد زمني يبلغ O(n^2)، حيث "n" هو عدد العناصر التي يجب فرزها. وهذا يعني أن وقت تشغيل الخوارزمية يزداد بشكل تربيعي مع زيادة حجم القائمة.

2. متى يكون من المناسب استخدام خوارزمية فرز الفقاعات؟

تعتبر خوارزمية فرز الفقاعات مناسبة عندما تكون قائمة العناصر المطلوب فرزها صغيرة. نظرًا لتعقيدها الزمني، لا يُنصح باستخدامها على مجموعات البيانات الكبيرة نظرًا لتوفر خوارزميات أكثر كفاءة.

3. هل خوارزمية فرز الفقاعات مستقرة؟

نعم، خوارزمية فرز الفقاعات هي خوارزمية فرز مستقرة. وهذا يعني أنه يحافظ على الترتيب النسبي للعناصر ذات المفاتيح المتساوية أثناء عملية الفرز.

4. ما هو البديل الأفضل لخوارزمية فرز الفقاعات؟

يعتمد اختيار البديل الأمثل لخوارزمية فرز الفقاعات على السياق والمتطلبات المحددة للمشكلة. ومع ذلك، تُستخدم بعض الخوارزميات الأكثر كفاءة، مثل الفرز السريع وفرز الدمج ، على نطاق واسع نظرًا لانخفاض تعقيدها الزمني.

  كل شيء عن خوارزمية شور: الوظيفة والتأثير والتحديات

5. هل يمكن تحسين خوارزمية فرز الفقاعات؟

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

6. أين يمكنني العثور على مزيد من المعلومات حول خوارزميات الفرز؟

يمكنك العثور على مزيد من المعلومات حول خوارزميات الفرز في مصادر موثوقة مثل ويكيبيديا. وفيما يلي بعض الروابط المفيدة:

اختتام

في هذه المقالة، قمنا باستكشاف خوارزمية فرز الفقاعات في لغات البرمجة C وJava. لقد تعلمنا كيفية عمل هذه الخوارزمية خطوة بخطوة، ورأينا تنفيذها العملي في كلتا اللغتين. لقد ناقشنا أيضًا مزايا وعيوب خوارزمية فرز الفقاعات، واستكشفنا بدائل أكثر كفاءة.

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

نأمل أن تكون هذه المقالة قد أعطتك فهمًا قويًا لخوارزمية فرز الفقاعات.