Cod sursa(job #1894185)

Utilizator icansmileSmileSmile icansmile Data 26 februarie 2017 16:32:12
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;

void merge(int *&toBeSorted,int start, int end){
    int u[end - start +1];

    int mid = start + (end - start)/2;
    int i = start;
    int j = mid + 1;
    int k = 1;

    while(i <= mid && j <= end)
        if( toBeSorted[i] <= toBeSorted[j] )
            u[k++] = toBeSorted[i++];
        else
            u[k++] = toBeSorted[j++];

    while( i <= mid)
        u[k++] = toBeSorted[i++];

    while( j <= end)
        u[k++] = toBeSorted[j++];

    int x = 1;
    for(int i = start; i <= end; i++ )
        if( x < k)
    {
        toBeSorted[i] = u[x];
        x++;
    }
}

void merge_sort(int *&toBeSorted, int start, int end) {
    if(start == end)
        return;

    int mid = start + (end - start)/2;
    merge_sort(toBeSorted,start,mid);
    merge_sort(toBeSorted,mid+1,end);
    merge(toBeSorted,start,end);
}



int main() {
    ifstream in("algosort.in");
    ofstream out("algosort.out");

    int n;
    int *v;

    in >> n;

    v = (int*)malloc( ( n + 1) *sizeof(int));

    for(int i = 1; i <= n; i++)
        in >> v[i];

    merge_sort(v,1,n);

    for(int i = 1; i <= n; i++ )
        out << v[i] << " ";

    return 0;
}