Pagini recente » Cod sursa (job #1675013) | Cod sursa (job #2917953) | Cod sursa (job #523959) | Cod sursa (job #1524813) | Cod sursa (job #3253675)
#include <iostream>
#include <fstream>
using namespace std;
int v[500000];
int va[250000];
int vb[250000];
int c[500000];
void interclasare(int a[], int n, int b[], int m){
int k1=0, k2=0, k3=0;
while(k1<n && k2<m){
if(a[k1]<b[k2]){
c[k3++]=a[k1];
k1++;
}else{
c[k3++]=b[k2];
k2++;
}
}
for(int i=k1; i<n; i++){
c[k3++]=a[i];
}
for(int i=k2; i<m; i++){
c[k3++]=b[i];
}
}
void mergesort(int a, int b){
if(b-a==1){
if(v[a]>v[b]) swap(v[a], v[b]);
return;
}
if(a==b) return;
int mid=(a+b)/2;
mergesort(a, mid);
mergesort(mid+1, b);
for(int i=a; i<=mid; i++){
va[i-a]=v[i];
}
for(int i=mid+1; i<=b; i++){
vb[i-mid-1]=v[i];
}
interclasare(va, mid-a+1, vb, b-mid);
for(int i=0; i<=b-a; i++){
v[i+a]=c[i];
}
}
int main(){
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n; fin>>n;
for(int i=0; i<n; i++){
fin>>v[i];
}
mergesort(0, n-1);
for(int i=0; i<n; i++){
fout<<v[i]<<" ";
}
return 0;
}