Share Pastebin
Guest
Public paste!

Untitled

By: a guest | Mar 20th, 2010 | Syntax: C++ | Size: 0.83 KB | Hits: 53 | Expires: Never
This paste has a previous version, view the difference. Copy text to clipboard
  1. #include "../include/caller.hpp"
  2.  
  3. void merge(int p, int q, int r, int *A)
  4. {
  5.         int i,j,k;
  6.         int n1=q-p+1;
  7.         int n2=r-q;
  8.         int *L=new int[n1+1];
  9.         int *R=new int[n2+1];
  10.         for (i=0; i<n1;i++)
  11.                 L[i]=A[p+i];
  12.         for (j=0; j<n2;j++)
  13.                 R[j]=A[q+j+1];
  14.         L[n1] = abs(L[n1-1]) + abs(R[n2-1]);
  15.         R[n2] = abs(L[n1-1]) + abs(R[n2-1]);
  16.         i=0;
  17.         j=0;
  18.         for (k=p;k<=r;k++)
  19.                 if (L[i]<=R[j])
  20.                         A[k]=L[i++];
  21.                 else
  22.                         A[k]=R[j++];
  23.         delete L[];
  24.         delete R[];
  25. }
  26.  
  27. void merge_nat(int *A, int n)
  28. {
  29. int first,i,mid;
  30.         do
  31.         {
  32.                 i=0;
  33.                 while (i<n-1)
  34.                         {
  35.                                 first=i;
  36.                                 while(i<n-1 && A[i]<=A[i+1]) i++;
  37.                                 mid=i;
  38.                                 i++;
  39.                                 while(i<n-1 && A[i]<=A[i+1]) i++;
  40.                                 if (i<n-1)
  41.                                 {
  42.                                         merge(first,mid,i,A);
  43.                                         ++i;
  44.                                 }
  45.                         }
  46.         }
  47.         while (first!=0);
  48. }
  49.  
  50. int main(int argc, char** argv) {
  51.    
  52.    call_sort(merge_nat);
  53.    return 0;
  54. }