Sunteți pe pagina 1din 2

#include <iostream>

using namespace std;


int n,a[200001],k;
void interclasare(int s,int d,int m)
{int i,j,k,b[200001];
i=s;
j=m+1;
k=1;
while(i<=m && j<=d)
{if(a[i]<a[j])
{b[k]=a[i];
i++;
k++;}
else
{b[k]=a[j];
j++;
k++;
}}
while(i<=m)
{b[k]=a[i];
i++;
k++;
}
while(j<=d)
{b[k]=a[j];
j++;
k++;
}
j=1;
for(i=s;i<=d;i++)
{a[i]=b[j];
j++;
}
}
void MergeSort(int s,int d)
{if(d-s<=1)
{if(a[s]>a[d])
swap(a[s],a[d]);
}
else
{int m=(s+d)/2;
MergeSort(s,m);
MergeSort(m+1,d);
interclasare(s,d,m);
}}
int Pivot(int s,int d)
{int is=1,id=0;
while(s<d)
{if(a[s]<a[d])
{swap(a[s],a[d]);
swap(is,id);
}
s=s+is;
d=d-id;
}
return s;
}
void sortare(int s,int d)
{if(s<d)
{int p=Pivot(s,d);
sortare(s,p-1);
sortare(p+1,d);
}}
int main()
{int i;
cin>>n>>k;
for(i=1;i<=n;i++)
cin>>a[i];
MergeSort(1,k);
sortare(k+1,n);
for(i=1;i<=n;i++)
cout<<a[i]<<" ";
return 0;
}

S-ar putea să vă placă și