Pagini recente » Cod sursa (job #1004761) | Cod sursa (job #1605521) | Cod sursa (job #1401178) | Cod sursa (job #1818219) | Cod sursa (job #650726)
Cod sursa(job #650726)
#include<stdio.h>
#include<vector>
using namespace std;
void interclasare(vector<long int>&v_1,long int st_1,long int dr_1,vector<long int>&v_2,long int st_2,long int dr_2,vector<long int>&v_3,long int st_3,long int dr_3)
{
vector<long int>auxiliar;
long int i,save_st_1=st_1,save_dr_1=dr_1,save_st_2=st_2,save_dr_2=dr_2;
while(st_1<=dr_1&&st_2<=dr_2)
if(v_1[st_1]<v_2[st_2])
auxiliar.push_back(v_1[st_1++]);
else
if(v_1[st_1]>v_2[st_2])
auxiliar.push_back(v_2[st_2++]);
else
if(v_1[st_1]==v_2[st_2])
{
auxiliar.push_back(v_1[st_1++]);
auxiliar.push_back(v_2[st_2++]);
}
while(st_1<=dr_1)
auxiliar.push_back(v_1[st_1++]);
while(st_2<=dr_2)
auxiliar.push_back(v_2[st_2++]);
for(i=0;i<(save_dr_1-save_st_1+save_dr_2-save_st_2+2);i++)
v_3[st_3++]=auxiliar[i];
}
void merge_sort(vector<long int>&v,long int st,long int dr)
{
long int m;
if(st<dr)
{
m=(st+dr)/2;
merge_sort(v,st,m);
merge_sort(v,m+1,dr);
interclasare(v,st,m,v,m+1,dr,v,st,dr);
}
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
long int n;
vector<long int>v;
long int i,x;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&x);
v.push_back(x);
}
merge_sort(v,0,n-1);
for(i=0;i<n;i++)
printf("%d ",v[i]);
return 0;
}