Cod sursa(job #2228543)

Utilizator valorosu_300Cristian Gherman valorosu_300 Data 4 august 2018 10:30:54
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
const int N = 500002, K = 40;
int v[N], a[N];
void interclasare(int st, int dr, int mid){
    int i = st, j = mid + 1, poz = st;
    while(i <= mid && j <= dr)
        if(v[i] > v[j])
            a[poz++] = v[j++];
        else
            a[poz++] = v[i++];
    if(i <= mid)
        for(int j=i;j<=mid;j++)
            a[poz++] = v[j];
    else
        for(int i=j;i<=dr;i++)
            a[poz++] = v[i];
    for(int i=st;i<=dr;i++)
        v[i] = a[i];
}
void insertionSort(int st, int dr){
    int key, j;
    for(int i=st+1;i<=dr;i++){
        key = v[i];
        j = i - 1;
        while(j >= st && v[j] > key)
            v[j+1] = v[j--];
        v[j+1] = key;
    }
}
void divide(int st, int dr){
    int mid = (st + dr) / 2;
    if(dr - st < K)
        insertionSort(st,dr);
    else{
        divide(st,mid);
        divide(mid+1,dr);
        interclasare(st,dr,mid);
    }
}
void mergeSort(int n){
    divide(1,n);
}
int main()
{
    int n;
    in>>n;
    for(int i=1;i<=n;i++)
        in>>v[i];
    in.close();
    mergeSort(n);
    for(int i=1;i<=n;i++)
        out<<v[i]<<" ";
    out<<"\n";
    out.close();
    return 0;
}