Recent Posts

Divide and Conquer Merge_sort


Divide and Conquer Merge_sort

This is a discussion on Divide and Conquer Merge_sort within the C++ Programming forums, part of the General Programming Boards category; This code is supposed to sort an array using the divide-and-conquer method. But I think I mixed up the index. .

#include <iostream>
using namespace std;
void Merge(float *A , int p , int q , int r)
{
  int n1 = q - p + 1;
  int n2 = r - q;
  float *L = new float [n1];
  float *R = new float [n2];
  int i , j;
  for ( i = 0 ; i < n1 ; i++)
    L[i] = A[p + i -1];
    
  for ( j = 0 ; j < n2 ; j++)
    R[j] = A[q + j];
     
  i = 1;
  j = 1;
  for ( int k = p; k <= r ; k++)
    {
      if ( L[i] <= R[j])
    {
      A[k] = L[i];
      ++i;
    }
      else if (A[k] == R[j])
    {
      ++j;
    }
    }
  
  delete [] L;
  delete [] R;
}
void Merge_Sort(float *A, int p, int r)
{
  if ( p < r )
    {
      int q = (p+r)/2;
      Merge_Sort(A,p,q);
      Merge_Sort(A,q+1,r);
      Merge(A,p,q,r);
    }
}
     
int main()
{
  int n = 8;
  float A[] = {5,2,4,7,1,3,2,6};
  for ( int i = 0 ; i < 8 ; i++)
    std::cout << A[i] << std::endl;
  Merge_Sort(A,1,7);
  cout << endl;
  for ( int i = 0 ; i < 8 ; i++)
    std::cout << A[i] << std::endl;
  return 0;
}#include <iostream>
using namespace std;
void Merge(float *A , int p , int q , int r)
{
  int n1 = q - p + 1;
  int n2 = r - q;
  float *L = new float [n1];
  float *R = new float [n2];
  int i , j;
  for ( i = 0 ; i < n1 ; i++)
    L[i] = A[p + i -1];
    
  for ( j = 0 ; j < n2 ; j++)
    R[j] = A[q + j];
     
  i = 1;
  j = 1;
  for ( int k = p; k <= r ; k++)
    {
      if ( L[i] <= R[j])
    {
      A[k] = L[i];
      ++i;
    }
      else if (A[k] == R[j])
    {
      ++j;
    }
    }
  
  delete [] L;
  delete [] R;
}
void Merge_Sort(float *A, int p, int r)
{
  if ( p < r )
    {
      int q = (p+r)/2;
      Merge_Sort(A,p,q);
      Merge_Sort(A,q+1,r);
      Merge(A,p,q,r);
    }
}
     
int main()
{
  int n = 8;
  float A[] = {5,2,4,7,1,3,2,6};
  for ( int i = 0 ; i < 8 ; i++)
    std::cout << A[i] << std::endl;
  Merge_Sort(A,1,7);
  cout << endl;
  for ( int i = 0 ; i < 8 ; i++)
    std::cout << A[i] << std::endl;
  return 0;
}
Share on Google Plus

About Engr. Rokon Khan

    Blogger Comment
    Facebook Comment

0 comments:

Post a Comment