Cod sursa(job #2624717)

Utilizator UrsaWarlordFrincu Madalin Gabriel UrsaWarlord Data 5 iunie 2020 10:46:31
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.47 kb
#include <bits/stdc++.h>

using namespace std;



// 1: numere aleatorii

// 2: numere aproape sortate

// 3: numere sortate invers

// 4: numere aleatorii dar multe perechi de numere identice



void merge(int arr[], int l, int m, int r)

{



    int i,j,k;

    int n1 = m - l + 1;

    int n2 = r - m;

    int L[n1],R[n2];



    for(i=0;i<n1;i++)

        L[i] = arr[l+i];

    for(j=0;j<n2;j++)

        R[j] = arr[m+1+j];



    i = 0;

    j = 0;

    k = l;

    while(i < n1 && j < n2)

    {

        if(L[i] <= R[j])

        {

            arr[k] = L[i];

            i++;

        }

        else{

            arr[k] = R[j];

            j++;

        }

        k++;

    }



    while(i<n1)

    {

        arr[k] = L[i];

        i++;

        k++;

    }



    while(j<n2)

    {

        arr[k] = R[j];

        j++;

        k++;

    }



}



void mergeSort(int arr[], int l, int r)

{



    if(l<r)

    {

        int m = l+(r-l)/2; // overflow on (l+r)/2 big numbers

        mergeSort(arr,l,m);

        mergeSort(arr,m+1,r);

        merge(arr,l,m,r);

    }

}



int N;

ifstream f("algsort.in");

ofstream g("algsort.out");



int main()

{

    f >> N;

    int myvect[N];

    for(int i=0;i<N;i++)

        f >> myvect[i];

    mergeSort(myvect,0,N-1);

    for(int i=0;i<N;i++)

        g << myvect[i] << " ";

}