☄ عاجل
الرئيسية / الخوارزميات / خوارزمية الترتيب بالإختيار: الشرح السهل مع التنفيذ

خوارزمية الترتيب بالإختيار: الشرح السهل مع التنفيذ

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

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

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

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

مثال لخوارزمية الترتيب بالإختيار

خوارزمية الترتيب بالإختيار

  • الخطوة 0: تُعبرة عن حال المصفوفة قبل الترتيب.
    • يجب أن تضع مؤشر البحث في أول 2 رقم مُعتبراً أنه أصغر رقم.
    • تنتقل إلى الخانات التالية 6،4،5،3،1 واحدة تلو الأخرى.
    • إذا وجدت رقماً أصغر من الذي يوجد عليه المؤشر تضع عليه المؤشر و تواصل البحث حتى تصل لنهاية المصفوفة.
    • عندما تصل لنهاية المصفوفة تستبدل الرقم حيث المؤشر 1 مع الرقم الأول 2.
  • الخطوة 1:
    •  تبدأ عملية البحث من الخانة الثانية حيث الرقم 6 و تعتبره أصغر رقم بوضع المؤشر عليه.
    • تقارن بينه و بين الرقم التالي 4، و لأن 46 تضع عليها المؤشر كأصغر رقم.
    • تنتقل للرقم التالي 5، لن تُجري عملية لأن 5>4.
    • تنتقل للرقم 3، تضع المؤشر على الرقم 3 لأن 3<4.
    • تنتقل للرقم 2 و تضع المؤشر على الرقم 2 لأن 2<3.
    • بإنتهاء المصفوفة تبديل الرقم حيث المؤشر 3 مع أول خانة في الجزء غير المرتب 6.
  • الخطوة 2: تبديل أصغر رقم 3 مع أول خانة 4.
  • الخطوة 3: تبديل أصغر رقم 4 مع أول خانة 5.
  • الخطوة 4:  الرقم 5 هو أصغر رقم، لا يوجد إجراء مطلوب.
  • الخطوة 5: الرقم 6 هو أصغر رقم، لا يوجد إجراء مطلوب.
  • الخطوة 6: المصفوفة مرتبة.

الكود التقريبي لخوارزمية الترتيب بالإختيار

SELECTION-SORT(A)
        for j ← 1 to n-1
	         smallest ← j
         	 for i ← j + 1 to n
	                  if A[ i ] < A[ smallest ]
                          smallest ← i
         	  Exchange A[ j ] ↔ A[ smallest ]

خوارزمية الترتيب بالإختيار بلغة الجافا

public static void SelectionSort ( int [ ] num )
{
     int i, j, first, temp;  
     for ( i = num.length - 1; i > 0; i - - )  
     {
          first = 0;   //initialize to subscript of first element
          for(j = 1; j <= i; j ++)   //locate smallest element between positions 1 and i.
          {
               if( num[ j ] < num[ first ] )         
                 first = j;
          }
          temp = num[ first ];   //swap smallest found with element in position i.
          num[ first ] = num[ i ];
          num[ i ] = temp; 
      }           
}

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

عن مصطفى الطيب

صديقٌ لنُظمِ المعلُومات و عُلومِ الحَاسِب و مُختصٌ بهما، مُحبٌ للعِلمِ و نَشرِه. أُشاركُ معارفي و تَجاربي و خِبراتي في تَدويناتٍ و دوراتٍ من خلال مُدونةِ عُلوم.

20 تعليق

  1. طالبة جامعية مكروفة

    جزاكم الله خير … شرح جميل جدا جدا .. واستفدت منه كثير

  2. مشكووور علي الشرح الراائع

  3. شكرا جزيلا على الشرح
    من خلال حديثكم نرى وجود عدة انواع للفرز
    فرز بالاختيار وبالتبديل وبالاقحام وبالتجزئة
    هل يوجد انواع اخرى للفرز ؟
    ارجو الافادة ولكم جزيل الشكر ..

  4. طالب من جامعة النيلين جزاكم الله خيرا استفدت منه كتير

  5. شكرا كتيييير علي الشرح الجميل والسهل
    الحمدلله استفدت منه بكل سهولة .
    ربنا يعطيكم الصحة والعافية

  6. ممكن كتابة انواع الفرز كلها وماهو أفضل نوع
    وشكرا لك

  7. السلام عليكم….
    ارجوكم اريد حل سؤال ….
    هذا هوا السؤال ؟؟؟
    باستخدامselect case كتابة برنامج يقرأ مصفوفه من المستخدم عدد عناصرها N في حالة إخالك الرقم 1 يقوم بالبحث بطريقة الترتيب الإختياري في حالة إدخالك الرقم 2 يقوم بالبحث الفقاعي وفي حالة إدخالك الرقم 3 يقوم بالبحث بطريقة الإدراج؟؟؟

    ملاحظة الإجابة تكون عن طريق برنامج (c++)
    ارررررررررررررررجو الإجابه الان

    وشكراً

    واكون شاااااااكره لكم اذا ساعدتمووووني

    • السلام عليكم الا يوووجد رد على سؤالي

    • مرحباً بك دوماً،

      بإذن الله نستطيع مساعدتك إذا ما وضعتي محاولتك لحل هذا الواجب.

    • السلام عليكم..
      اولا تقومين بتعريف 3 دوال مع الكود الخاص بهم لانواع الترتيب الثلاثة
      ومن ثم تقومين بكتابة الدالة الرئيسية وتقومين باستدعاء الدوال الثلاثة بحسب قيمة الادخال. والكود ادناه سيساعدك باذن الله..وابتوفيق

      void selectin_sort (int arr[], int n)
      {
      //selection sort code goes here
      }

      void bubble_sort (int arr[] , int n)
      {
      //bubble sort code goes here
      }

      void insertion_sort (int arr[], int n)
      {
      //insertion sort code goes here
      }

      void main()
      {

      cout>>”Enter a number : ” ;

      cin>> n;

      switch(n)
      {
      case 1 : selection_sort(arr,10);
      breake;
      case 2 : bubble_sort(arr,10);
      break;
      case 3 : bubble_sort(arr,10);
      break;
      default: cout<<"Invalide number!";
      break;
      }

      //print sorted array

      for (i=0;i<10;i++)
      cout<<arr[i];
      }

    • اسف لوجود بعض الاخطاء الطفيفة بسبب العجلة وهذا تصحيح

      void selectin_sort (int arr[], int n)
      {
      //selection sort code goes here
      }

      void bubble_sort (int arr[] , int n)
      {
      //bubble sort code goes here
      }

      void insertion_sort (int arr[], int n)
      {
      //insertion sort code goes here
      }

      void main()
      {
      int n;
      int arr[] = {5,2,8,44,3,5,0,12,2,5}

      cout<> n;

      switch(n)
      {
      case 1 : selection_sort(arr,10);
      breake;
      case 2 : bubble_sort(arr,10);
      break;
      case 3 : bubble_sort(arr,10);
      break;
      default: cout<<"Invalide number!";
      break;
      }

      //print sorted array

      for (int i=0;i<10;i++)
      cout<<arr[i];
      }

  8. مرحبا..اريد كتابة كود بخوارزمية الترتيب بالاختيار وإعطاء واجهة لذلك بلغة الجافا

أضف تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *