خوارزمية الترتيب بالإختيار من الخوارزميات الأساسية التي يجب معرفتها لجميع دارسي علم الخوارزميات، و ربما ستندهش من حقيقة أنك قد إبتكرت هذه الخوارزمية بنفسك و استخدمتها في حياتك كثيراً دون أن تسميها بإسمها “خوارزمية الترتيب بالإختيار”، و ستلاحظ أن طريقة عمل الخوارزمية من السهولة بمكان، فلا يغرنك الإسم 🙂 .
سميت هذه الخوارزمية بهذا الإسم لأنها تعتمد على مبدأ إختيار أصغر عنصر بالمصفوفة في كل مرة و وضعه في مكانه الصحيح، و لنعرف الطريقة تفصيلاً نُجزئها إلى خطوات.
طريقة عمل خوارزمية الترتيب بالإختيار
- ابحث عن أصغر عنصر بالمصفوفة و بادله بأول عنصر بالمصفوفة، و المبادلة تعني أن تضع كل عنصر مكان الآخر، و إذا وجدت أن أصغر عنصر بالمصفوفة في أول خانة منها فلا داعي لإجراء تغيير، فهو في مكانه الصحيح.
- ابحث عن أصغر عنصر في المصفوفة ناقصاً الجزء المُرتب.
- لتوضيح معنى الجزء المرتب، عندما وضعت في الخطوة الأولى أصغر عنصر في الخانة الأولى فأنت تعلم أن هذا العنصر قد أخذ مكانه الصحيح و هنا نسمي الخانة الأولى بالجزء المرتب، و لإيجاد ثاني أصغر عنصر بالمصفوفة ستبحث في عناصر عددها = طول المصفوفة -1، في الخطوة الثانية يكون لديك عنصران مرتبان، الخانة الأولى و الخانة الثانية و هذان هما الجزء المرتب، و بالتالي ستبحث في عناصر عددها = طول المصفوفة -2 لوضع العنصر الثالث في مكانه.
- تعيد الخطوة الثانية حتى تصل لنهاية المصفوفة، بتعبير آخر، يصبح طول الجزء المرتب من المصفوفة مساوياً لطول المصفوفة.
مثال لخوارزمية الترتيب بالإختيار
[tie_list type=”checklist”]
- الخطوة 0: تُعبرة عن حال المصفوفة قبل الترتيب.
- يجب أن تضع مؤشر البحث في أول 2 رقم مُعتبراً أنه أصغر رقم.
- تنتقل إلى الخانات التالية 6،4،5،3،1 واحدة تلو الأخرى.
- إذا وجدت رقماً أصغر من الذي يوجد عليه المؤشر 2 تضع عليه المؤشر و تواصل البحث حتى تصل لنهاية المصفوفة.
- عندما تصل لنهاية المصفوفة تستبدل الرقم حيث المؤشر 1 مع الرقم الأول 2.
- الخطوة 1:
- تبدأ عملية البحث من الخانة الثانية حيث الرقم 6 و تعتبره أصغر رقم بوضع المؤشر عليه.
- تقارن بينه و بين الرقم التالي 4، و لأن 4 < 6 تضع عليها المؤشر كأصغر رقم.
- تنتقل للرقم التالي 5، لن تُجري عملية لأن 5>4.
- تنتقل للرقم 3، تضع المؤشر على الرقم 3 لأن 3<4.
- تنتقل للرقم 2 و تضع المؤشر على الرقم 2 لأن 2<3.
- بإنتهاء المصفوفة تبديل الرقم حيث المؤشر 3 مع أول خانة في الجزء غير المرتب 6.
- الخطوة 2: تبديل أصغر رقم 3 مع أول خانة 4.
- الخطوة 3: تبديل أصغر رقم 4 مع أول خانة 5.
- الخطوة 4: الرقم 5 هو أصغر رقم، لا يوجد إجراء مطلوب.
- الخطوة 5: الرقم 6 هو أصغر رقم، لا يوجد إجراء مطلوب.
- الخطوة 6: المصفوفة مرتبة.[/tie_list]
الكود التقريبي لخوارزمية الترتيب بالإختيار
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; } }
بهذا نصل لختام تناولنا لخوارزمية الترتيب بالإختيار، لطفاً إذا ما وجدت أن هذه التدوينة مفيدة لا تتردد في مشاركتها مع أصدقائك و زملائك و الاطلاع علي هذه التدوينات.
خوارزمية الترتيب الفقاعي | Bubble Sort Algorithm
ممكن ي أستاذ مصطفى تجيب لي خوارزمية الترتيب بالإختيار مكتوبة ب pseudocode ضروري
شكرا لك مدوناتك اكثر من رائعة
متابعك على الدوام ❤
اريد الترتيب بالادخال و الترتيب بالاختيار
شاهد جميع تدوينات قسم الخوارزميات.
اريد كود يضم خوارزمية الفقاعة والترتيب بالادخل والترتيب السريع والترتيب الاختياري باختصار كل انواع الخوارزميات في كود واحد باسرع وقت ممكن
عذراً مصعب، توجّه مدونة علوم حالياً هو مشاركة العلوم ولا نؤدي الطلبات -خاصّة المتعلقة بالواجبات-.
مكن تضيف طريقة د. شيل في الشرح.
اولا اريد ان اشكرك على شرحك الجميل و الوافي
ثانيا
اريد ان اتقن الخورزميات فبما تنصحني استاذ لانه كما تعلم استاذ مدى اهمية الخورزميات في تعلم البرمجة
شكراً لك على تواجد هنا محمد.
الخوارزميات مهمة فعلاً، واصل التعلّم وستصل إلى مبتغاك بإذن الله.
انا مبتدئه في لغة الجافا وصلت لغاية object oriented
ما اهمية خوارزمية الترتيب؟
انا مبتدئه في لغة الجافا وصلت لغاية object oriented
ما اهمية خوارزمية الترتيب؟
شكرا
شكرا
الرجاء شرح موضوع Algorithms analysis & algorithms Complexity بالتفصيل (نظرى – رياضى)
من المواضيع المهمة فعلاً أخي مصطفى وهو موجود في قائمة التدوينات القادمة في مدونة علوم. وبالرغم من ذلك أشكُرك على ذكر هذا الموضوع المهم.
كيف يمكنني اضافة العناصر المراد ترتيبها في الكود
بإمكانك وضعها في مصفوفة وإرسالها إلى الدالة SelectionSort.
ما شاءالله اشكرك على هالمدونة المفيدة
وماراح ننساك من دعواتنا بظهر الغيب ان شاءالله
غدير
مرحباً بك غدير، ويسعدني دوماً تواجدك في مدونة علوم جُزيتِ الجنّة.
مرحبا..اريد كتابة كود بخوارزمية الترتيب بالاختيار وإعطاء واجهة لذلك بلغة الجافا
مرحباً بك سوس،
لم يصل إليّ هدفك من التعليق. ولكن على كُلٍ ذلك ممكن!
بالتوفيق.
السلام عليكم….
ارجوكم اريد حل سؤال ….
هذا هوا السؤال ؟؟؟
باستخدام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];
}
ممكن كتابة انواع الفرز كلها وماهو أفضل نوع
وشكرا لك
مرحباً بك،
سيحدث ذلك تباعاً إن شاء الله، هنا توجد تدوينات الخوارزميات ربما تجدين فيها بعض ما تبحثين عنه.
شكرا كتيييير علي الشرح الجميل والسهل
الحمدلله استفدت منه بكل سهولة .
ربنا يعطيكم الصحة والعافية
عفواً صلاح، أسعدتني يا رجل
عافاك الله دوماً و أبدا و وفقك
طالب من جامعة النيلين جزاكم الله خيرا استفدت منه كتير
أتمنى لك التوفيق مُبارك.. ولكل طلاب جامعتك العريقة
شكرا جزيلا على الشرح
من خلال حديثكم نرى وجود عدة انواع للفرز
فرز بالاختيار وبالتبديل وبالاقحام وبالتجزئة
هل يوجد انواع اخرى للفرز ؟
ارجو الافادة ولكم جزيل الشكر ..
عفواً أماني،
نعم توجد خوارزميات أخرى للترتيب غير ما ذُكر مثل الترتيب السريع و الترتيب الدمجي
مشكووور علي الشرح الراائع
العفو أحمد
جزاكم الله خير … شرح جميل جدا جدا .. واستفدت منه كثير
و إياك يا رب، من سعدي إفادتكم، وفقك الله
جزاكم الله خيرا استاذ مصطفى شرحكم ممتاز..
بارك الله بمسعاكم هذا وفقكم الله لكل خير
نبغى طريقة حل الخوارزمية كيف احلها