أ) المبدأ : في كل مرة ، حدد أصغر عنصر من السجلات المراد فرزها ، ووضعه بالترتيب في نهاية التسلسل المرتبة حتى يتم فرز جميع السجلات. أي أنه يتم تحديد كل رحلة كسجل I-TH في التسلسل المطلوب بين سجلات N-I+1 (I = 1 ، 2 ، ... N-1). تتضمن الخوارزميات القائمة على هذه الفكرة بشكل أساسي فرز الاختيار البسيط وفرز اختيار الأشجار وفرز الكومة. (هذا هو فرز اختيار بسيط شائع فقط)
ب) الفكرة الأساسية للاختيار البسيط للفرز : إعطاء صفيف: int [] arr = {n data in in} ؛ أول مرة الفرز ، حدد أصغر البيانات في البيانات المراد فرزها ARR [1] ~ arr [n] ، وتبادلها مع ARR [1] ؛ في المرة الثانية ، حدد أصغر البيانات في البيانات المراد فرزها ARR [2] ~ arr [n] ، وتبادلها مع r [2] ؛ وما إلى ذلك ، حدد أصغر البيانات في البيانات المراد فرزها ARR [i] ~ arr [n] ، وتبادلها مع r [i] حتى يتم الانتهاء من جميع الفرز.
ج) مثال : صفيف int [] arr = {5،2،8،4،9،1} ؛
---------------------------------------------------
الترتيب الأول: البيانات الأصلية: 528491
الحد الأدنى للبيانات 1 ، وضع 1 أولاً ، أي 1 و 5 مواقف تبادل ،
النتيجة الفرز: 128495
---------------------------------------------------
الترتيب الثاني:
تتم مقارنة البيانات خارج 1 {28495} ، 2 هي الأصغر ،
النتيجة الفرز: 128495
---------------------------------------------------
الترتيب الثالث:
تتم مقارنة البيانات بخلاف 1 و 2 {8495} ، يتم تبادل 4 و 4 و 4
النتيجة الفرز: 124895
---------------------------------------------------
الترتيب الرابع:
تتم مقارنة بيانات أخرى بخلاف 1 و 2 و 4
النتيجة الفرز: 124598
---------------------------------------------------
الترتيب الخامس:
تتم مقارنة بيانات أخرى بخلاف 1 و 2 و 4 و 5 ، و 8 و 8 و 9 يتم تبادلها
النتيجة الفرز: 124589
---------------------------------------------------
ملاحظة: طريقة الحصول على أصغر رقم في كل أمر: لكي تقارن الحلقة ، تحدد درجة حرارة متغيرة ثالثة. أولاً ، قارن الرقمين الأولين ، ووضع الرقم الأصغر في درجة الحرارة ، ثم استخدم Temp للمقارنة مع البيانات المتبقية. إذا ظهرت بيانات أصغر من درجة الحرارة ، استخدمها بدلاً من البيانات الأصلية في درجة الحرارة. للحصول على تفاصيل ، بالإشارة إلى أمثلة الكود أدناه ، أعتقد أنك تعلمت بيان الحلقة قبل تعلم الفرز. وبهذه الطريقة ، سيكون من السهل الفهم هنا.
مثال رمز:
. System.out.println ("قبل التبادل:") ؛ لـ (int num: arr) {system.out.print (num+"") ؛ } // حدد تحسين الفرز لـ (int i = 0 ؛ i <arr.length - 1 ؛ i ++) {// فرز i -th order int k = i ؛ لـ (int j = k+1 ؛ j <arr.length ؛ j ++) {// حدد أصغر سجل if (arr [j] <arr [k]) {k = j ؛ // لاحظ موقع الحد الأدنى للقيمة الموجودة حتى الآن}}} // بعد نهاية الحلقة الداخلية ، أي بعد العثور على الحد الأدنى لعدد هذه الحلقة ، ثم تبادل إذا (i! = k) {// swap a [i] و a [k] int = arr [i] ؛ arr [i] = arr [k] ؛ arr [k] = temp ؛ }} system.out.println () ؛ System.out.println ("بعد المبادلة:") ؛ لـ (int num: arr) {system.out.print (num+"") ؛ }}}لقطة شاشة للنتيجة الجري:
حدد التعقيد الزمني للفرز: لا علاقة عدد مقارنات الاختيار البسيط بالفرز الأولي للتسلسل. على افتراض أن التسلسل المراد فرزه يحتوي على عناصر n ، فإن عدد المقارنات سيكون دائمًا n (n-1)/2. يرتبط عدد الحركات بالفرز الأولي للتسلسل. عندما يكون التسلسل إيجابيًا ، يكون عدد الحركات هو الأقل ، وهو 0. عندما يكون التسلسل متسلسلًا عكسيًا ، تكون معظم الحركات 3N (N-1)/2.
لذلك ، باختصار ، فإن التعقيد الزمني للفرز البسيط هو O (N2).