spiegazioni merge sort ricorsivo

  • Creatore Discussione Creatore Discussione aneres
  • Data di inizio Data di inizio

aneres

Nuovo Utente
27 Feb 2012
21
0
0
qualcuno mi può sopiegare il funzionamento dei seguenti 2 metodi? grazie...
Codice:
static public void DoMerge(int [] numbers, int left, int mid, int right)

      {

        int [] temp = new int[25];

        int i, left_end, num_elements, tmp_pos;

    

        left_end = (mid - 1);

        tmp_pos = left;

        num_elements = (right - left + 1);

    

        while ((left <= left_end) && (mid <= right))

        {

            if (numbers[left] <= numbers[mid])

                temp[tmp_pos++] = numbers[left++];

            else

                temp[tmp_pos++] = numbers[mid++];

        }

    

        while (left <= left_end)

            temp[tmp_pos++] = numbers[left++];

 

        while (mid <= right)

            temp[tmp_pos++] = numbers[mid++];

 

        for (i = 0; i < num_elements; i++)

        {

            numbers[right] = temp[right];

            right--;

        }

    }



Codice:
static public void MergeSort_Recursive(int [] numbers, int left, int right)

    {

      int mid;

    

      if (right > left)

      {

        mid = (right + left) / 2;

        MergeSort_Recursive(numbers, left, mid);

        MergeSort_Recursive(numbers, (mid + 1), right);

    

        DoMerge(numbers, left, (mid+1), right);

      }

    }
 

Discussioni simili