#include<iostream>
#include<time.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
using namespace std;
#define N 15
#define NIL 0x0ffffffe
int sum=0;
void merge(int a[],int l,int m,int r)
{
int k=0,begin1,begin2,end1,end2;
int *t;
begin1=l;
end1=m;
begin2=m+1;
end2=r;
t= new int[r-l+1];
for(k=0;begin1<=end1&&begin2<=end2;)
{
if(a[begin1]<=a[begin2]){
t[k]=a[begin1++];
}
else{
t[k]=a[begin2++];
sum+= m-begin1+1;
}
k++;
}
while(begin1<=end1||begin2<=end2)
{
if(begin1<=end1){
t[k++] = a[begin1++];
}
if(begin2<=end2){
t[k++]=a[begin2++];
}
}
for(int i=0;i<=(r-l);i++)
{
a[l+i] = t[i];
}
delete []t;
}
void merge_v1(int a[],int l,int m,int r)
{
int n1=m-l+1;
int n2=r-m;
int i,j;
int L[n1+1];
int R[n2+1];
for(i=0;i<n1;i++)
{
L[i]=a[l+i];
}
for(i=0;i<n2;i++)
{
R[i]=a[m+i+1];
}
L[n1] = NIL;
R[n2] = NIL;
i=0;
j=0;
int k=l;
while(k<=r)
{
if(L[i]<=R[j]){
a[k] = L[i];
i++;
}
else{
a[k]=R[j];
j++;
}
k++;
}
}
void merge_sort(int a[], int l,int r)
{
if(l>=r) return;
else{
int m=(l+r)/2;
merge_sort(a,l,m);
merge_sort(a,m+1,r);
merge_v1(a,l,m,r);
}
}
void print(int a[])
{
int i=0;
while(i<N)
{
cout<<a[i]<<" ";
i++;
}
cout<<endl;
}
int main()
{
int a[N];
srand(time(0));
for(int i=0;i<N;i++)
{
a[i]=rand()%(N*15);
}
cout<<NIL<<endl;
merge_sort(a,0,N-1);
print(a);
cout<<"sum:"<<sum<<endl;
return 0;
}
#include<time.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
using namespace std;
#define N 15
#define NIL 0x0ffffffe
int sum=0;
void merge(int a[],int l,int m,int r)
{
int k=0,begin1,begin2,end1,end2;
int *t;
begin1=l;
end1=m;
begin2=m+1;
end2=r;
t= new int[r-l+1];
for(k=0;begin1<=end1&&begin2<=end2;)
{
if(a[begin1]<=a[begin2]){
t[k]=a[begin1++];
}
else{
t[k]=a[begin2++];
sum+= m-begin1+1;
}
k++;
}
while(begin1<=end1||begin2<=end2)
{
if(begin1<=end1){
t[k++] = a[begin1++];
}
if(begin2<=end2){
t[k++]=a[begin2++];
}
}
for(int i=0;i<=(r-l);i++)
{
a[l+i] = t[i];
}
delete []t;
}
void merge_v1(int a[],int l,int m,int r)
{
int n1=m-l+1;
int n2=r-m;
int i,j;
int L[n1+1];
int R[n2+1];
for(i=0;i<n1;i++)
{
L[i]=a[l+i];
}
for(i=0;i<n2;i++)
{
R[i]=a[m+i+1];
}
L[n1] = NIL;
R[n2] = NIL;
i=0;
j=0;
int k=l;
while(k<=r)
{
if(L[i]<=R[j]){
a[k] = L[i];
i++;
}
else{
a[k]=R[j];
j++;
}
k++;
}
}
void merge_sort(int a[], int l,int r)
{
if(l>=r) return;
else{
int m=(l+r)/2;
merge_sort(a,l,m);
merge_sort(a,m+1,r);
merge_v1(a,l,m,r);
}
}
void print(int a[])
{
int i=0;
while(i<N)
{
cout<<a[i]<<" ";
i++;
}
cout<<endl;
}
int main()
{
int a[N];
srand(time(0));
for(int i=0;i<N;i++)
{
a[i]=rand()%(N*15);
}
cout<<NIL<<endl;
merge_sort(a,0,N-1);
print(a);
cout<<"sum:"<<sum<<endl;
return 0;
}