Pagini recente » Cod sursa (job #1857338) | Cod sursa (job #1739422) | Cod sursa (job #2269887) | Cod sursa (job #361015) | Cod sursa (job #1143898)
//Infoarena. Arhiva Educationala. Sortarea Prin Comparatie.
//Implementare Merge Sort
#include<iostream>
#include<fstream>
using namespace std;
void MergeSort(long int[],int,int);
void Interchange(long int[],int,int,int);
long int B[500005];
int main(){
ifstream InFile("algsort.in");
ofstream OutFile("algsort.out");
long int A[500005]; int n;
InFile>>n;
for(int i=0;i<n;i++) InFile>>A[i];
MergeSort(A,0,n-1);
for(int i=0;i<n;i++) OutFile<<A[i]<<" ";
}
void MergeSort(long int A[],int st,int dr){
if(st<dr){
int mid=(st+dr)/2;
MergeSort(A,st,mid);
MergeSort(A,mid+1,dr);
Interchange(A,st,mid,dr);
}
}
void Interchange(long int A[],int st,int mid,int dr){
int k=0;
int i=st,j=mid+1;
while(i<=mid && j<=dr){
if(A[i]<A[j]){
B[k++]=A[i++];
}else{
B[k++]=A[j++];
}
}
while(i<=mid){
B[k++]=A[i++];
}
while(j<=dr){
B[k++]=A[j++];
}
for(int t=0;t<=dr-st;t++){
A[t+st]=B[t];
}
}