📊 ترتيب المصفوفات في جافا: كيف تجعل بياناتك مرتبة تلقائياً؟ 🤖

هل تخيلت يوماً أن لديك قائمة طويلة من الأسماء أو الأرقام وتريد ترتيبها بسرعة؟ في جافا، يمكننا فعل ذلك بسهولة! ترتيب المصفوفات (Sorting Arrays) هو عملية إعادة ترتيب عناصر المصفوفة وفقاً لقاعدة معينة، مثل الترتيب من الأصغر إلى الأكبر (تصاعدي) أو من الأكبر إلى الأصغر (تنازلي). هيا نتعلم كيف نفعل ذلك.


🧩 لماذا نحتاج لترتيب المصفوفات؟

تخيل هذه السيناريوهات:

  • لديك مصفوفة بأسماء طلاب وتريد عرضها أبجدياً.
  • لديك مصفوفة بدرجات الطلاب وتريد معرفة أعلى درجة.
  • لديك مصفوفة بأسعار منتجات وتريد ترتيبها من الأرخص للأغلى.

الترتيب يجعل البيانات أسهل في القراءة والبحث والتحليل. لحسن الحظ، جافا توفر لنا أدوات جاهزة للقيام بذلك دون الحاجة لكتابة خوارزميات معقدة.


🔢 ترتيب المصفوفات الرقمية (تصاعدياً)

لترتيب مصفوفة من الأرقام (مثل int أو double) ترتيباً تصاعدياً (من الأصغر للأكبر)، نستخدم الدالة الجاهزة Arrays.sort().

كيفية الاستخدام:

  1. نستدعي الدالة Arrays.sort().
  2. نمرر لها اسم المصفوفة التي نريد ترتيبها كمعامل (argument).

مثال عملي:

import java.util.Arrays; // لا تنسى استدعاء المكتبة المطلوبة

public class Main {
    public static void main(String[] args) {
        // مصفوفة أرقام غير مرتبة
        int[] numbers = {5, 2, 9, 1, 5, 6};
        
        System.out.println("Original Array: " + Arrays.toString(numbers));
        
        // السحر يحدث هنا! نرتب المصفوفة
        Arrays.sort(numbers);
        
        System.out.println("Sorted Array: " + Arrays.toString(numbers));
    }
}

النتيجة:

Original Array: [5, 2, 9, 1, 5, 6]
Sorted Array: [1, 2, 5, 5, 6, 9]

كما ترى، أصبحت الأرقام مرتبة من الأصغر (1) إلى الأكبر (9) تلقائياً! ✨


🔤 ترتيب المصفوفات النصية (String)

نفس الدالة Arrays.sort() تعمل مع المصفوفات النصية أيضاً! ستقوم بترتيبها أبجدياً (تصاعدياً).

مثال عملي:

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        String[] names = {"Ziad", "Ahmed", "Sarah", "Basel"};
        
        System.out.println("Names before sorting: " + Arrays.toString(names));
        
        Arrays.sort(names);
        
        System.out.println("Names after sorting: " + Arrays.toString(names));
    }
}

النتيجة:

Names before sorting: [Ziad, Ahmed, Sarah, Basel]
Names after sorting: [Ahmed, Basel, Sarah, Ziad]

لاحظ أن الترتيب أبجدي حسب الحروف العربية.


⬇️ كيف نرتب المصفوفات ترتيباً تنازلياً؟

للأسف، لا يوجد خيار مباشر في Arrays.sort() للترتيب التنازلي. ولكن يمكننا تحقيق ذلك بخطوتين:

  1. ترتيب المصفوفة تصاعدياً باستخدام Arrays.sort().
  2. عكس ترتيب عناصر المصفوفة الناتجة.

مثال لترتيب تنازلي:

import java.util.Arrays;
import java.util.Collections;

public class Main {
    public static void main(String[] args) {
        // لاحظ أننا استخدمنا Integer[] بدلاً من int[]
        // لأن Collections.reverseOrder() تعمل مع أنواع الكائنات (Objects)
        Integer[] numbers = {5, 2, 9, 1, 5, 6};
        
        // الخطوة 1: الترتيب تصاعدياً (أصغر إلى أكبر)
        Arrays.sort(numbers);
        System.out.println("After sorting: " + Arrays.toString(numbers));
        
        // الخطوة 2: عكس المصفوفة للحصول على الترتيب التنازلي
        // ننشئ مصفوفة جديدة بنفس الطول
        Integer[] descendingNumbers = new Integer[numbers.length];
        int index = 0;
        for(int i = numbers.length - 1; i >= 0; i--) {
            descendingNumbers[index] = numbers[i];
            index++;
        }
        
        System.out.println("Descending Order: " + Arrays.toString(descendingNumbers));
    }
}

النتيجة:

After sorting: [1, 2, 5, 5, 6, 9]
Descending Order: [9, 6, 5, 5, 2, 1]

بهذه الطريقة، حصلنا على الترتيب من الأكبر (9) إلى الأصغر (1).


💡 ملاحظات هامة جداً للمبتدئين

  1. الدالة تغير المصفوفة الأصلية: عندما تستدعي Arrays.sort(yourArray), فإن المصفوفة yourArray تتغير للأبد. إذا أردت الاحتفاظ بالترتيب الأصلي، فأنسخ المصفوفة أولاً ثم رتب النسخة.
  2. الترتيب أبجدي للنصوص: ترتيب الحروف الكبيرة (Capital letters) يختلف عن الصغيرة في اللغة الإنجليزية. غالباً ما تأتي الحروف الكبيرة أولاً أبجدياً.
  3. الأساس هو المقارنة: عملية الترتيب تعتمد على مقارنة العناصر ببعضها. الأرقام تقارن بقيمتها، والنصوص تقارن أبجدياً حرفاً حرفاً.