diff --git a/merge/merge_sort.cpp b/merge/merge_sort.cpp new file mode 100644 index 0000000..58fa2eb --- /dev/null +++ b/merge/merge_sort.cpp @@ -0,0 +1,49 @@ +#include +using namespace std; +#define MAX 2000009 + +int a[MAX]; + +void merge(int *a, int p, int q, int r, int& c){ + int L[q-p+1],R[r-q]; + for(int i=p;i<=q;i++) L[i-p]=a[i]; + for(int i=q+1;i<=r;i++) R[i-q-1]=a[i]; + + int i=0,j=0,k=p; + while(i<=(q-p) && j<=(r-q-1)){ + if(L[i]<=R[j]){ + a[k]=L[i]; + k++,i++; + }else{ + c+=q-p-i+1; + a[k]=R[j]; + j++,k++; + } + } + for(;i<=q-p;i++) a[k++]=L[i]; + for(;j<=r-q-1;j++) a[k++]=R[j]; + return; +} + +void mergeSort(int *a, int p, int r, int& c){ + if(p