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

فهم "بوبل سورت" في "ديبث"

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

الخطوات الغامضة

  1. ابدأ في بداية الصفوف
  2. قارنوا العنصرين الأولين، إذا كان الأول أكبر من الثاني، عالجوهم.
  3. الانتقال إلى الزوج التالي (البيانان 2 و 3) وتكرار المقارنة وإمكانية تبادلها.
  4. تابع هذه العملية للصفيفة بأكملها بعد مرور كامل واحد، أكبر عنصر سينتقل إلى آخر موقع.
  5. اكرر التصاريح لكن كل تمريرة لاحقة يمكن أن توقف عنصر واحد قبل ذلك لأن ذيل الصفوف قد تم فرزه بالفعل
  6. وإذا حدث تمرير كامل دون أي مسح، يتم فرز الصفوف وينتهي الخوارزمية في وقت مبكر.

This early termination optimization is often overlooked in basic implementations but can reduce bestcase time to O(n)] when the input is already sorted. However, in the worst case — a reverse-sorted list – the algorithm makes a full ]n passes,

التعقيد الزمني والفضاء

  • Worst-case time:] O(n2) - occurs when the array is in reverse order.
  • Average-case time:] O(n2) — due to the nested cycles performing ~]n2/2 comparisons.
  • Best-case time:] O(n) - مع الإنهاء المبكر على الوجه الأمثل وصفيفة مصنَّفة.
  • Space complexity:] O(1) - It sorts in-place using only a constant amount of extra memory (a single temporary variable for swaps).

Bubble Sort is a stable algorithm, meaning that equal elements retain their original relative order. This property can be important for certain applications, but stability is rarely a decisive factor given its inefficiency.

متى (نظريا) تستخدم "الثورة الرخامية"

فخارج السياقات التعليمية، لا يكاد يكون الخيار الأفضل، بل إن مزاياه الوحيدة هي البساطة القصوى وقدرة على الكشف عما إذا كان المدخل قد فرز بالفعل في تمريرة واحدة، فبعض ] Wikipedia article on Bubble Sort تشير إلى أنها ترى استخداما في الصور الحاسبية الإلكترونية للمهام الصغيرة التي تكون فيها سمة الشفرة أكبر من الافتراض().

فهم الغضب الشديد

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

الخطوات الغامضة

  1. النظر في العنصر الأول كما سبق فرزه (تتم تسوية قائمة واحدة من العناصر ثلاثية الأبعاد).
  2. خذ العنصر التالي من الجزء غير المرخص
  3. قارنها بالعناصر في الجزء المُصنَّف، منتقلاً من اليمين إلى اليسار.
  4. تُشغّل جميع العناصر المُفرزة التي هي أكبر من العنصر الحالي الذي يُحتل فيه موقع واحد على اليمين.
  5. أدخل العنصر الحالي إلى البقعة المهجورة
  6. اكرر الخطتين 2-5 حتى يتم تجهيز المجموعة بأكملها

وعلى عكس قضية Bubble Sort، لا تقوم شركة Insertion Sort بإجراء مقايضة غير ضرورية، بل تُغيّر عناصرها، وهي أكثر كفاءة عموماً لأنها تتجنب النفقة العامة للمهام المؤقتة المتعددة لكل زوج، وعلاوة على ذلك، فإن شركة Insertion Sort تعمل بشكل جيد على البيانات التي تكاد تُفرز: فكل عنصر جديد يحتاج فقط إلى بضعة مقارنات قبل أن يجد موقعها الصحيح.

التعقيد الزمني والفضاء

  • Worst-case time:] O(n2) - عندما يتم فرز الصفوف بترتيب عكسي، وكل إدراج يتطلب تحويل جميع العناصر في الجزء المصنف.
  • Average-case time:] O(n2) - ولكن مع عامل ثابت أدنى من نوع Bubble Sort في الممارسة العملية.
  • Best-case time:] O(n) - عندما يتم فرز الصفوف بالفعل، وكل عنصر جديد يقارن مرة واحدة ولا يحتاج إلى التحول.
  • Space complexity:] O(1) - in-place with constant extra memory.

Insertion Sort is also stable], maintaining relative order of equal keys. Its adaptive nature – performance improves as the data becomes more sorted — makes it a practical choice for small datasets and as a subroutine in more sophisticated algorithms like Timsort.

Relevance Real-World

Insertion Sort is far from obsolete. Many modern programming languages use it internally for small arrays. For example, Python’s uses Timsort, which leverages Insertion Sorts for small runs. Similarly, Java’s ] for primitives uses Dual-Pivot Quicksort but may fall back to Insertion array.

مقارنة الكفاءة من الرئيس إلى الرئيس

ويتقاسم الخوارزميات كلاهما مع تقلبات التوقيت من الفئة " سين " ، مع أن أداءهما العملي يتفاوت تفاوتا كبيرا، والاختلافات الرئيسية تكمن في عدد المقارنات والحركات، والقدرة على التكيف مع نظام المدخلات، وتكلفة التبادل مقابل التحول.

عدد العمليات

Bubble Sort] always performs n*()n-1)/2 comparisons in the worst case, and the same number of swaps (w reverse sorted). Each swap list means: [2]

Insertion Sort[FLT:] in the worst case also performs ~n2/2 comparisons, but the “movement” phase is different. instead of swapping, it shifts elements by copying them one position to the right.

السلوك الإيجابي

Insertion Sort is inherently adaptive: if the array is already sorted, it performs only n-1 comparisons and zero shifts. If the array is nearly sorted, only a few elements need to be inserted, and those insertions typically involve short shifts. Bubble Sort, even with its optimized early termination,F still perform up to [2]

Memory Locality and Caching

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

أفضل حالات الاستخدام

والاختيار بين هذه الخوارزميات يتوقف على القيود التي تواجهها المشكلة:

عندما يُمكن قبول "بوبل سورت"

  • Educational demonstrations] — its simplicity helps beginners grasp sorting concepts.
  • ] Extremely small datasets ( " 10 elements) where performance differences are negligible.
  • عندما يكون الاستقرار والفرز في مكان ما ضروريا ، ويُستهزّز البساطة الرمزية بالكفاءة.
  • Hardware implementations] where the swapping operation can be executed in parallel (e.g., systolic arrays).

ومع ذلك، وحتى في هذه الحالات، فإن الضم إلى التلقيم هو تقريباً بديل أفضل للتسرب إلى الداخل مع الحد الأدنى من التعقيد في القانون.

عندما يكون الإرسال متخفياً

  • Small صفائف (50 عنصرا) - كثير من المكتبات الموحدة تحول إلى صنف الإلحاق بالنسبة لصغر الحجم بسبب انخفاض النفقات العامة.
  • early sorted data] – insertion sort runs in O(n) time on already sorted or almost-sorted input, making it ideal for maintaining order after a few mutations.
  • Online sorting] - when elements arrive incrementally and must be inserted into a sorted list, Insertion Sort is natural.
  • As a building block] — in hybrid algorithms like Timsort, Insertion Sort handles small runs efficiently.
  • Embedded systems] – where memory is tight and the dataset fits in cache, Insertion Sort provides good performance with minimal code size.

For a more detailed discussion of use cases, the GeeksforGeeks article on Insertion Sort] provides examples and variations.

الأداء التجريبي: علامة مبسطة

وللحد من المقارنة بالأرقام، النظر في تجربة حاسوب محمول نموذجي ينفذ كلا من الخوارزميات في بايتون (رغم أن السلوك النسبي يمتد عبر اللغات).

  • رشاش: 2.5 ثانية
  • الإلحاق: 0.9 ثانية

With 50,000 elements, Bubble Sort becomes completely impractical ( minutess), while Insertion Sort still completes in a few seconds. On nearly sorted data (e.g., only 0.1% of elements out of order), Insertion Sort can end in linear time, whereas Bubble Sort still requires multiple passes and performs many redundant comparisons. These results are consistent with analysis from resources

Complexity Analysis beyond Big O

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

عدد المقارنات

وفي أسوأ الحالات، يقوم كل من الخوارزميين بـ [(FLT:0]n]([)(n[(-1)/2 مقارنات، غير أن الإلحاق يُجري مقارنات أقل في المتوسط لأنه يتوقف عن المسح عندما يجد نقطة الخروج، ويقارن دائماً بين كل زوجين متاخمين في كل صفيفة.

عدد المهام

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

  • Bubble Sort: - (3 ]n[2/2 مهام.
  • Insertion Sort: n2/2) shifts + n] insertions ng n2/2 + n].

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

أثر توزيع البيانات

Insertion Sort excels on partially sorted data because the number of inversions – couples of elements that are out of order – directly correlates with its running time. The number of shifts Insertion Sorts will perform. For random data, there are about n) inversions on average, Burtbble

Memory Footprint and Stability

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

المتغيرات والتعظيم

تم تزييف كل من الخوارزميات على مر السنين:

متغيرات رخامية

  • Cocktail Shaker Sort] - المعروفة أيضاً باسم Bubble Sort ثنائية الاتجاه، وتصدر القائمة وتخفضها، التي يمكن أن تقلل قليلاً من عدد المرور عندما يكون أصغر عنصر في نهاية المطاف.
  • Comb Sort] - introduces a gap between compared elements, effectively turning it into a simpler version of Shell Sort. It improves average performance but still falls short of Insertion Sort for small sizes.

ونادرا ما تستخدم هذه المتغيرات في الممارسة العملية؛ فهي تظل في معظمها أكاديمية.

التصويب

  • Binary Insertion Sort] - يستعمل البحث الثنائي لإيجاد نقطة الإدراج، مما يقلل من عدد المقارنات من O(n) إلى O(log n) لكل إضافة، غير أن عدد التحولات يظل O(n)، وبالتالي فإن التعقيد الكلي للزمن يبقى O(n2).
  • Shell Sort] — generalizes Insertion Sort by allowing comparisons of remote elements. It has better asymptotic performance (O(n log n) in some gap sequences) and is a practical algorithm for medium-sized arrays.

وعلى الرغم من هذه التباينات، فإن الضمادات الأساسية لا تزال هي التي تتجه إلى بيانات صغيرة أو شبه مُفرزة.

متى يتجنب كلاهما

وفي أي مجموعة بيانات أكبر من بضع مئات من العناصر، لا يكون من المناسب الحصول على إذن بالبلازم أو الإلحاق، وعلى هذا المنوال، يمكن أن تكون الخوارزميات (أو) لوحات (ن) مثل Quicksort، أو Merge Sort، أو هيب سورت (Hap Sort Sortsminate)، وحتى في الحجم 100، فإن الفرق بين O(n2) و(n log) يمكن أن يكون أمراً كبيراً.

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

الاستنتاج: يُصبحُ الإرسالُ يَنْتصرُ تقريباً كُلّ وقت

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

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

For further reading, consult Khan Academy’s Algorithms course] for a beginner-friendly introduction to sorting complexity.