Pagini recente » Cod sursa (job #513469) | Cod sursa (job #1460690) | Cod sursa (job #1849151) | Cod sursa (job #2225579) | Cod sursa (job #678604)
Cod sursa(job #678604)
//Mergesort
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
#define file_in "algsort.in"
#define file_out "algsort.out"
int N,X;
vector<int> V;
void interclasare(vector<int> &V, int left, int middle, int right){
int i=left;
int j=middle+1;
vector<int> VV;
while(i<=middle && j<=right){
if (V[i]<V[j]){
VV.push_back(V[i]);
i++;
}
else{
VV.push_back(V[j]);
j++;
}
}
while(i<=middle){
VV.push_back(V[i]);
i++;
}
while(j<=right){
VV.push_back(V[j]);
j++;
}
i=left;
for (vector<int> :: iterator it=VV.begin();it!=VV.end();++it)
V[i++]=(*it);
}
void mergesort(vector<int> &V, int left, int right){
int middle;
if (left<right){
middle=(left+right)/2;
mergesort(V,left,middle);
mergesort(V,middle+1,right);
interclasare(V,left,middle,right);
}
}
int main(){
int i;
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d", &N);
for (i=0;i<N;++i){
scanf("%d", &X);
V.push_back(X);
}
mergesort(V,0,N-1);
for (i=0;i<N;++i)
printf("%d ", V[i]);
return 0;
}