مرجع
آخر الزيارات

فرز بالإدراج

496 كلمة•0 مشاهدة•🗒️ منذ 8 أيام
باختصار: الترتيب بالإدراج (: Insertion Sort) هي خوارزمية ترتيب بسيطة مبدأها مشابه لما يستعملهُ أغلب الناس عند ترتيب أوراقهم أو ملفاتهم. تجد هنا «// zero or one element in list»، «} else {» و«struct LIST * pSorted = NULL;» ضمن 12 قسماً.
المحتويات
  1. // zero or one element in list
  2. } else {
  3. struct LIST * pSorted = NULL;
  4. مثال
  5. while(p != NULL) {
  6. pList = pList->pNext;
  7. {
  8. };
  9. return pList;
  10. pList = pList->pNext;
  11. return pList;
  12. {
فرز بالإدراج

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

كذلك، خوارزمية بسيطة: قام عالم الحاسوب جون بنتلي بتطبيق الخوارزمية في ثلاثة سطور بلغة سي ونسخة محسنة في 5 سطور.

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

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

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

من جانب آخر، وبرمجياً، تتطلب الخوارزمية عدد مقارنات من الرتبة ، ومعدل تبديلات من الرتبة ، وتعقيد زمني برتبة .

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

الثبات: لا يغير الترتيب النسبي للمدخلات ذات مفاتيح متساوية.

في المكان: يحتاج فقط إلى ذاكرة اضافية.

// zero or one element in list

if(!pList || !pList->pNext)

} else {

struct LIST * p = head;

من جهة ثانية، // insert current element into proper position in non-empty sorted list

struct LIST * pSorted = NULL;

  • /* take items off the input list one by one until empty */
  • while (pList != NULL)
  • {
  • /* remember the head */
  • struct LIST * pHead = pList;
  • /* trailing pointer for efficient splice */
  • struct LIST ** ppTrail = &pSorted;
  • /* pop head off list */

مثال

  • مثال بسيط لترتيب قائمة متصلة بالإدراج بلغة C
  • struct LIST * SortList1(struct LIST * pList) {
  • // zero or one element in list

while(p != NULL) {

current->iValue < p->pNext->iValue) // middle of the list

pList = pList->pNext;

  • // insert into the head of the sorted list
  • // or as the first element into an empty sorted list
  • current->pNext = head;
  • head = current;

{

  • // insert into middle of the sorted list or as the last element
  • current->pNext = p->pNext;
  • p->pNext = current;
  • break; // done
  • }
  • p = p->pNext;
  • }
  • }
  • }
  • return head;
  • }
  • struct LIST
  • {
  • struct LIST * pNext;
  • int iValue;

};

{

struct LIST * SortList(struct LIST * pList)

return pList;

/* build up the sorted array from the empty list */

pList = pList->pNext;

/* splice head into sorted list at proper place */

return pList;

  • // head is the first element of resulting sorted list
  • struct LIST * head = NULL;
  • while(pList != NULL) {
  • struct LIST * current = pList;

{

  • /* no - continue down the list */
  • ppTrail = &(*ppTrail)->pNext;
  • }
  • pHead->pNext = *ppTrail;
  • *ppTrail = pHead;
  • }
  • return pSorted;
  • }

ما رأيك في هذه المقالة؟

📝 هل في هذه المقالة خطأ؟

إذا وجدت معلومة تحتاج تصحيحاً أو إضافة، أو أردت حذف المقالة، أرسل لنا طلباً وسنراجعه.