يعد فرز المصفوفات إحدى العمليات الأكثر شيوعًا التي يجب أن يعرفها مبتدئ Java. على الرغم من أن المصفوفات ليست دائمًا الطريقة الأكثر ملاءمة لترتيب البيانات، وهذا ينطبق في الغالب على الأعداد الصغيرة، إلا أن المفهوم الكامن وراء فرز المصفوفات له الكثير من التطبيقات في البرامج المعقدة وعلوم البيانات. في هذه المقالة، سنلقي نظرة فاحصة على نوع الإدراج. لقد قمنا بتضمين بعض الأمثلة والمسائل التدريبية لمساعدتك على فهم هذا المفهوم بشكل كامل.
ما هو فرز الإدراج؟
في الأساس، فرز الإدراج هو خوارزمية يستخدمها المطورون لتنظيم سلاسل من الأرقام الصغيرة. فهو يقسم جميع القيم إلى مجموعتين - واحدة مفروزة وغير مصنفة. واحدًا تلو الآخر، يتم انتقاء الأرقام الموجودة في المكدس "غير المصنف" ووضعها بالترتيب الصحيح. دعونا نلقي نظرة فاحصة على المدخلات والمخرجات من نوع الإدراج:- الإدخال: مصفوفة A تحتوي على عناصر رقمية غير مصنفة: A[0,1, n, n-2...].
- الإخراج: مصفوفة تحتوي على نفس الأرقام ولكن مرتبة بالكامل. يُشار إلى هذا عادةً باسم B: B[0]B[1]...B[n-1].
- الفرز العددي (ترتيب تصاعدي): [1، 2، 3، 4، 5]
- الفرز العددي (ترتيب تنازلي): [5، 4، 3، 2، 1]
- الترتيب الأبجدي: [أ، ب، ج، د]
فهم نظرية فرز الإدراج
قبل استكشاف التعليمات البرمجية وراء فرز الإدراج، دعونا نقسم الخوارزمية باستخدام لغة غير تقنية. نظرًا لأننا سنعرض رمز الفرز بترتيب تصاعدي، فمن المنطقي شرح الخوارزمية خطوة بخطوة في هذا المنشور. الخطوة 1. التكرار بينarr[1]
وأين arr[n]
تكون n
قيمة عددية عادة أقل من 10. الخطوة 2. قارن العنصر الذي اخترته (المعروف باسم key
) بالرقم السابق في التسلسل باستخدام الطريقة sort()
. الخطوة 3. إذا كانت جميع العناصر أصغر من العناصر التي تليها، كرر المقارنة حتى تجد قيمة أكبر. الخطوة 4. قم بتبديل القيمة الأكبر بموضع واحد خلف الموضع الأصغر لإنشاء تسلسل مرتب. الخطوة 5. كرر العملية حتى تحصل على سلسلة مرتبة من الأحرف
فرز المصفوفات البدائية
نظرًا لأن الخوارزمية هي إحدى عمليات Java الأكثر وضوحًا، فلن يواجه المبتدئون صعوبة كبيرة في تنفيذها. فيما يلي دليل خطوة بخطوة لفرز المصفوفة1. قم بتعريف مصفوفة للفرز
في البداية، لنقم بإنشاء سلسلة من القيم التي سنعرضها لاحقًا باستخدام Java. لاستخدام الفرز بالإدراج، تحتاج إلى إنشاء مصفوفة. من أجل ذلك استخدمint[]
int[] arrayA = {10, 14, 20, 30};
2. استخدمsort_arr لتنفيذ الخوارزمية
تعد طريقةsort_arr إحدى الطرق الأكثر شيوعًا لتنفيذ فرز الإدراج. في الممارسة العملية، يبدو الأمر كما يلي:for(int i=0; i< sort_arr.length; ++i){
int j = i;
3. قم بإنشاء حلقة ومكرر
باستخدام حلقة في خوارزمية فرز الإدراج، لا يتعين على المطورين تكرار المنطق لكل عنصر. على الرغم من أن إنشاء الحلقات يبدو معقدًا، إلا أنه بسيط جدًا - إليك مثال:for(int i=0; i< sort_arr.length; ++i){
الآن بعد أن أصبح لديك حلقة فعالة، فقد حان الوقت لإنشاء مكرر يقوم بفرز جميع العناصر بالترتيب المطلوب. من الآن فصاعدا، سوف نشير إلى المكرر باسم " j
".
int j = i;
4. إنشاء "حلقة أثناء"
عندما يتعلق الأمر بفرز الإدراج، فإن حلقة "أثناء" ضرورية لمصفوفة جديدة مفروزة. لإعداده لفرز الإدراج بترتيب تصاعدي، يحتاج المطور إلى الالتزام بشرطين:- القيمة المخصصة لـ j يجب أن تكون أكبر من 0
j-1
يجب أن تكون القيمة المخصصة أكبر منj
الفهرس
j
.
5. فرز المصفوفة
بعد إعداد حلقة while، سيتم تبديل قيمj
and حتى يفشل أحد الشرطين أو كليهما في حلقة while. j-1
وبالمثل، سيتم تكرار الفرز لكل قيمة في حلقة for حتى تفشل شروط الحلقة أيضًا. إليك كيفية عمل عملية فرز الإدراج عمليًا:
int key = sort_arr[j];
sort_arr[j] = sort_arr[j-1];
sort_arr[j-1] = key;
j = j-1;
فرز قائمة ArrayList
على الرغم من أهمية فهم الرياضيات وراء فرز الإدراج، عندما يتعلق الأمر بتطوير البرامج الواقعية، فسوف تقوم بفرز ArrayLists أكثر بكثير من التسلسلات في المصفوفات البدائية. فيما يلي دليل خطوة بخطوة لفرز ArrayList:- قم بإنشاء فئة جديدة
Element
للعناصر التي تنتمي إلى المجموعة.public class Element { private int id; public Element(int id) { this.id = id; }
- توجد طريقة داخل المجموعة
compareTo()
- سنستخدمها لمقارنة معرفات عنصرين.public int compareTo(Element element) { int res = 0; if (this.id < element.getId()) { res = -1; } if (this.id > element.getId()) { res = 1; } return res; } }
- قم بتطبيق الخوارزمية وإنشاء بعض الحلقات لفرز الكائنات
ArrayList
بدلاً من مقارنتها.public static void insertionSortArrayList(List<element> list) { for (int j = 1; j < list.size(); j++) { Element current = list.get(j); int i = j-1; while ((i > -1) && ((list.get(i).compareTo(current)) == 1)) { list.set(i+1, list.get(i)); i--; } list.set(i+1, current); } }
- يمكنك إضافة المزيد من العناصر إلى القائمة
ArrayList
أيضًا، كما هو موضح أدناه:List<element> list = new ArrayList<>(); // Create elements w/ IDs 0-24 for (int i = 0; i < 25; i++) { list.add(new Element(i)); } // To use insertion sort, shuffle the values Collections.shuffle(list);
- والآن حان وقت الفرز:
// This helps print values before sorting list.forEach(e -> System.out.print(e.getId() + ", ")); // Sort the list insertionSortArrayList(list); System.out.println(); // Display a sorted array list.forEach(e -> System.out.print(e.getId() + ", "));
- الآن دعونا نقارن المدخلات والمخرجات للتأكد من أننا لم نرتكب أي أخطاء. فيما يلي مقارنة السلسلة التي استخدمناها كمثال.
4, 2, 6, 7, 0, 5, 9, 1, 8, 3, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
GO TO FULL VERSION