Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <limits.h>
- #include "sort.hpp"
- void mergeopt(int* a,int la,int lb);
- void mergeoptSort1(int* p,int l);
- int* mem;
- int pos = 0;
- void mergeoptSort(int* p,int l)
- {
- mem = new int[l+2];
- mergeoptSort1(p,l);
- }
- void mergeoptSort1(int* p,int l)
- {
- if(l<=1)
- return;
- if(l<=20)
- {
- inSort(p,l);
- return;
- }
- int q = l>>1;
- mergeoptSort1(p,q);
- mergeoptSort1(p+q,l-q);
- mergeopt(p,q,l-q);
- }
- inline int* alloc(int l)
- {
- int* res = mem + pos;
- pos+=l;
- return res;
- }
- inline void de_alloc(int l)
- {
- pos -= l;
- }
- void mergeopt(int* a,int la,int lb)
- {
- int* a1 = alloc(la+1);
- int* b1 = alloc(lb+1);
- for(int i = 0;i<la;++i)
- a1[i] = a[i];
- int* b = a+la;
- for(int i = 0;i<lb;++i)
- b1[i] = b[i];
- a1[la] = INT_MAX;
- b1[lb] = INT_MAX;
- int p = 0, q = 0;
- int t = la+lb;
- for(int i = 0;i<t;++i)
- if(a1[p]<=b1[q])
- a[i] = a1[p++];
- else
- a[i] = b1[q++];
- de_alloc(la+1);
- de_alloc(lb+1);
- }
Advertisement
Add Comment
Please, Sign In to add comment