الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

merge sort

بدأه رااحيل في 21 أكتوبر 2010 · 9 رد · 11,112 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

راجع ال insertion sort

شرح سريع و مبسط لل merge sort :::

عندما يكون لدينا قائمة list بها بعض العناصر و نريد ترتيب هذا العناصر عن طريق ال merge sort

اولا نقوم بتقسيم ال list التى لدينا الى نصفين متساويين اذا كان عدد العناصر زوجى اما اذا كان عدد العناصر فردى نقوم بتقسيمها الى جزئين بحيث ان يكون الجزء على الطرف اليمين يزيد عن الجزء على الطرف الايسر بمقدار واحد يعنى لو كان عدد العناصر سبعة

نقسمها الى 4 و 3

بعد هذه الخطوة يصبح لدينا two list قائمتين من العناصر

انت تقوم بالتعامل مع كل قائمة على حدا.....

و تقوم بتقسيم القائمة اليمنى مثلا الى قائمتين و القائمتين تقوم بتقسيمهم الى اخرتين و هكذا

و نفس الخطوات مع القائمة اليسرى

الى ان نجد ان كل عنصر اصبح بقائمة منفصلة..اى قمنا بتفتيت العناصر و اصبح كل عنصر مستقل

الصورة تحكى::::::..................

post-210352-000663000 1287674632_thumb.p

و بعد ان توصلنا الى هذه المرحلة نقوم بترتيب العناصر و دمجهم مع بعضهم البعض حتى نجمعهم مرة اخرى فى list واحدة

لاحظ الصورة...سترى عملية المقارنة و دمج العناصر

post-210352-080134800 1287674760_thumb.p

الان مع الكود::::::

يطلب من المستخدم ادخال 6 عناصر اولا ثم يقوم بعرضها قبل الترتيب و عرضها بعد الترتيب

و نجد ان هناك داله خاصة بترتيب العناصر تسمى merge_Sort

import java.util.Scanner;

public class mergeSort{
  static int array[]=new int [6];
  public static void main(String a[]){
    int i;
    Scanner input=new Scanner(System.in);
    System.out.println("please,insert 6 numbers to be sorted:");
    for(i=0;i<6;i++){
   	array=input.nextInt(); 
    }
    System.out.println("Values Before the sort:\n");
    for(i = 0; i < array.length; i++)
      System.out.print( array+"  ");
    System.out.println();
    merge_Sort(array,0, array.length-1);
    System.out.print("Values after the sort:\n");
    for(i = 0; i <array.length; i++)
      System.out.print(array+"  ");
    System.out.println();
    System.out.println("PAUSE");
  }

  public static void merge_Sort(int array[],int lo, int n){
    int low = lo;
    int high = n;
    if (low >= high) {
      return;
    }

    int middle = (low + high) / 2;
    merge_Sort(array, low, middle);
    merge_Sort(array, middle + 1, high);
    int end_low = middle;
    int start_high = middle + 1;
    while ((lo <= end_low) && (start_high <= high)) {
      if (array[low] < array[start_high]) {
        low++;
            } else {
        int Temp = array[start_high];
        for (int k = start_high- 1; k >= low; k--) {
          array[k+1] = array[k];
        }
                array[low] = Temp;
                low++;
                end_low++;
                start_high++;
            }
        }
    }
}

نجد فى هذه الدالة merge_Sort هذه المتغيرات low و high حيث ان

المتغير low يشير الى بداية القائمة من الناحية اليسرى

و المتغير high يشير الى منتصف القائمة اى من بداية اللون الاحمر كما هو فى الصورة السابقة

و نقوم فى هذه الدالة بتقسيم القائمة

و ترتيب العناصر

بالنسبة للصور::انا عملتها على الاوفيس معذرة على عدم وضوحها جيدا

المرفقات
m1.pngm2.png

تم تعديل هذه المشاركة بواسطة هويدي في 21 أكتوبر 2010 في 22:49 — السبب: تقصدين راجع ال Insertion sort :(

4
00020309t.gif

1958_1963.gif
#2

درس جميل +1

ربنا يوفققك يارب

ويوفقنا جميعا

يمكنك الاستعانه بهذه الصور ان اردتى

مثال عندما تكون المصفوفه فرديه

post-217802-019271000 1287676412_thumb.p

مثال عندما تكون المصفوفه زوجيه

post-217802-049220300 1287676418_thumb.g

وبالنسبه للينك اللى فالاول هو لينك الـ insertion sort وليس merge sort

بالتوفيق

الى الامام دائما :)

المرفقات
merge_sort_algorithm_diagram.pngmergeSort.gif

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 21 أكتوبر 2010 في 18:57

Software Developer
Mahmoudkelany.com


 

#3

درس جيد ولكن يمكنك اضافة تحليل الالجوريزم من حيث الحاله المثلى والحاله الدنيا

Time complexity

Best case

Worst case

حتى يمكن المقارنه بين قوه هذا الألجوريزم وباقى الالجوريزمات

و+1 زى الباشمهندس كيلانى .

no-pain-no-gain.jpg

اذا كنت لا تعلم الى اين تذهب... فكــل الطرق تؤدى الى هناك

#4

ماشاء الله ...

شرح بسيط و جميل smile.gif

تمت الإضافه هو ال Insertion sort للمواضيع المميزه ..smile.gif

#5
اقتباس
م تعديل هذه المشاركة بواسطةهويدي: الأمس, 11:49 PM

سبب التعديل: تقصدين راجع ال Insertion sort :(

هو انا كنت كاتبه ايه؟

00020309t.gif

1958_1963.gif
#6
Mahmoud Kelany كتب:

وبالنسبه للينك اللى فالاول هو لينك الـ insertion sort وليس merge sort

بالتوفيق

الى الامام دائما :)

انا اخبرتك به من قبل :D

Software Developer
Mahmoudkelany.com


 

#7
اقتباس
وبالنسبه للينك اللى فالاول هو لينك الـ insertion sort وليس merge sort

افتكرتها اضافة من عندك :lol: :lol:

00020309t.gif

1958_1963.gif
#8
نفرتاري كتب:

افتكرتها اضافة من عندك :lol: :lol:

وانا اضيف بردوا :)

ربنا يزيدك من علمه يارب smile.gif

Software Developer
Mahmoudkelany.com


 

#9

السلام عليكم والله الالغوريتم صعب لم افهم به كثيرا اتمنى منكم شرح الكود سطر سطر يعني انا افهم الحلقة ومبدأ التراجعية ولكن بالنسبة لهذا الكود كل شيئ يختلط علي خاصة في الحلقة while ((lo <= end_low) && (start_high <= high)) {

اتمنى شرح وشكرا

#10

+1

:lol: :lol: :mad:

للمزيد يمكنك زيارة مدونتي

مدونة شخشخة

مواضيع مشابهة