Guest
Public paste!

Untitled

By: a guest | Mar 20th, 2010 | Syntax: C++ | Size: 0.70 KB | Hits: 76 | Expires: Never
Copy text to clipboard
  1. void mergenat(int *A, int n)
  2. {
  3. int first,i,mid;
  4.         do
  5.                 i=0;
  6.                 while (i<n-1)
  7.                         {
  8.                                 first=i;
  9.                                 while(i<n-1 && A[i]<=A[i+1]) i++;
  10.                                 mid=i;
  11.                                 i++;
  12.                                 while(i<n-1 && A[i]<=A[i+1]) i++;
  13.                                 if (i<n-1)
  14.                                 {
  15.                                         merge(first,mid,i,A);
  16.                                         ++i;
  17.                                 }
  18.                         }
  19.         while (first!=0)
  20. }
  21.  
  22. void merge(int p, int q, int r, int *A)
  23. {
  24.         int i,j,k;
  25.         int n1=q-p+1;
  26.         int n2=r-q;
  27.         int *L=new int[n1+1];
  28.         int *R=new int[n2+1];
  29.         for (i=0; i<n1;i++)
  30.                 L[i]=A[p+i];
  31.         for (j=0; j<n2;j++)
  32.                 R[j]=A[q+j+1];
  33.         L[n1] = abs(L[n1-1]) + abs(R[n2-1]);
  34.         R[n2] = abs(L[n1-1]) + abs(R[n2-1]);
  35.         i=0;
  36.         j=0;
  37.         for (k=p;k<=r;k++)
  38.                 if (L[i]<=R[j])
  39.                         A[k]=L[i++];
  40.                 else
  41.                         A[k]=R[j++];
  42.         delete L[];
  43.         delete R[];
  44. }