Cod sursa(job #1143898)

Utilizator toncuvasileToncu Vasile toncuvasile Data 16 martie 2014 11:54:56
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
//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];
    }

}