
_START_ARTICLE_
خوارزمية الاختيار
_START_PARAGRAPH_
خوارزمية الاختيار او selection algorithm هي لايجاد مكان عدد بالترتيب حسب التصنيف وتعد هذه الخوارزمية واحدة من أشهر الخوارزميات لانه يمكن تطبيقها بزمن خطي ولاستخداماتها المتعددة في علوم الحاسوب والطريقة التي تتم بها عن طريق الاستدعاء الذاتي او recursion
_START_SECTION_
مقدمة
_START_PARAGRAPH_
خوارزمية الاختيار هي طريقة بحث فعالة حيث يتم اعطاء الخوارزمية عدد,i,والهدف هو ايجاد العدد ال-i في القائمة بعد التصنيف -SORTING- هناك عدة طرق لايجاد هذا الهدف وقد تم التوصل إلى خوارزمية فعالة بوقت خطي - linear time algorithm-
_START_SECTION_
حالات خاصة
_START_PARAGRAPH_
عندما يكون i=1 عندها على الخوارزمية ايجاد العدد الأول من حيث الترتيب اي اصغر قيمة في القائمة وهذه المهمة بسيطة جدا وايجاد هذه القيمة يتم عن طريق بحث خطي مع متغير اضافي وها هي طريقة لفعل هذا : _NEWLINE_int FindMin(int[] A){int min=A[0];for(int j=1;j<=A.length;j++){ _NEWLINE_  if(A[j]<A[0])_NEWLINE_  {_NEWLINE_    min=A[j];_NEWLINE_  }}return min;}_NEWLINE_وحالة اخرى هي i=n وعندها يجب ايجاد القيمة الكبرى وبطريقة مشابهة لايجاد القيمة الصغرى .
_START_SECTION_
اختيار بالتصنيف
_START_PARAGRAPH_
نبدأ اولا بالطريقة السهلة وهي تتم عن طريق تحويل الاختيار إلى تصنيف ثم التوجه للعدد المطلوب اي :_NEWLINE_int select(int[] A,int i){return (A.sort())[i]}_NEWLINE_هذه الطريقة صحيحة ولكن الوقت الذي تحتاجه هو :((O(nlog(n ونريد ان نصل لخوارزمية فعالة بوقت خطي بالنسبة للمدخل !