حدد مفهوم الفرز
فرز الاختيار هو أيضًا خوارزمية فرز التبادل ، والتي لها تشابه معين مع فرز الفقاعات. لذلك ، أعتقد شخصياً أن اختيار الفرز يمكن اعتباره خوارزمية محسنة لفرز الفقاعات. فكرتها على النحو التالي:
لنفترض أن صفيف ARR [] تم فرزه الآن ، وله عناصر n.
1 قارن العنصر الأول (في Java ، Subcript هو 0) مع العنصر الثاني. إذا كان الأول أكبر من الأخير ، فيجب أن لا يكون الأصغر ، لكننا لا نسرع في تبديل مثل فرز الفقاعات. يمكننا تعيين متغير مؤقت A لتخزين مجموعة من هذا العنصر الأصغر حاليًا. ثم نستمر في مقارنة أصغر عنصر مع العنصر الثالث. إذا كان لا يزال ليس الأصغر ، فإننا نقوم بتعديل قيمة a. وبهذه الطريقة ، إلى أن يتم الانتهاء من المقارنة مع العنصر الأخير ، من المؤكد أن هناك فرقة من أصغر عنصر.
2. إذا كانت قيمة A ليست 0 (القيمة الأولية ، أي ، تراكب العنصر الأول) ، يتبادل العنصرين مع المشتركين A و 0.
3. كرر العملية أعلاه ، وابدأ المقارنة مع العنصر مع Subcript 1 هذه المرة ، لأنه تم وضع أصغر عنصر في الموضع مع Substcript 0.
4. بهذه الطريقة ، حتى يتم ترك العنصر الأخير فقط ، يمكنك التأكد من أن هذا العنصر هو الأكبر.
5. يتم الانتهاء من الفرز.
من الواضح أن هذه الخوارزمية تتطلب أيضًا جولات N-1 من الفرز.
تجدر الإشارة إلى أن التفسير أعلاه هو مجرد طريقة للعثور على القيمة الدنيا في كل مرة. في الواقع ، يمكنك أيضًا العثور على أقصى قيمة في كل مرة ، ولكن تحتاج إلى وضعها على ذيل الصفيف في كل مرة.
رمز تنفيذ Java:
SelectArray.java
حزمة CH02 ؛ فئة عامة SelectArray {// Array Private Long [] arr ؛ // حجم البيانات الصالحة في صفيف elems الخاص ؛ // Constructor Public SelectArray () {arr = new Long [50] ؛ } selectarray (int max) {arr = new long [max] ؛ } // إدراج بيانات الفراغ العام (القيمة الطويلة) {arr [elems] = value ؛ elems ++ ؛ } // عرض بيانات الفراغ العام () {for (int i = 0 ؛ i <elems ؛ i ++) {system.out.print (arr [i]+"") ؛ } system.out.println () ؛ } // حدد فرز public void selectSort () {int min = 0 ؛ TMP طويل = 0L ؛ لـ (int i = 0 ؛ i <elems -1 ؛ i ++) {min = i ؛ لـ (int j = i+1 ؛ j <elems ؛ j ++) {if (arr [j] <arr [min]) {min = j ؛ }} tmp = arr [i] ؛ arr [i] = arr [min] ؛ arr [min] = tmp ؛ }}}رمز الاختبار:
Package CH02 ؛ Public Class TestSelectArray {public static void main (string [] args) {SelectArray sarr = new SelectArray () ؛ sarr.insert (89) ؛ sarr.insert (54) ؛ sarr.insert (667) ؛ sarr.insert (7) ؛ sarr.insert (12) ؛ Sarr.insert (43) ؛ sarr.insert (12) ؛ sarr.display () ؛ sarr.selectsort () ؛ sarr.display () ؛ }} نتيجة: