Cod sursa(job #3211157)

Utilizator radu.deaconuDeaconu Radu-Andrei radu.deaconu Data 8 martie 2024 17:03:55
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.99 kb
#include <iostream>
#include <vector>
#include <fstream>


std::ifstream f("algsort.in");
std::ofstream g("algsort.out");

void merge(int arr[], int left, int mid, int right) {
    int n1 = mid - left + 1;
    int n2 = right - mid;

    // Create temporary arrays
    std::vector<int> left_arr(n1), right_arr(n2);

    // Copy data to temporary arrays left_arr[] and right_arr[]
    for (int i = 0; i < n1; i++)
        left_arr[i] = arr[left + i];
    for (int j = 0; j < n2; j++)
        right_arr[j] = arr[mid + 1 + j];

    // Merge the temporary arrays back into arr[left..right]
    int i = 0, j = 0, k = left;
    while (i < n1 && j < n2) {
        if (left_arr[i] <= right_arr[j]) {
            arr[k] = left_arr[i];
            i++;
        } else {
            arr[k] = right_arr[j];
            j++;
        }
        k++;
    }

    // Copy the remaining elements of left_arr[], if any
    while (i < n1) {
        arr[k] = left_arr[i];
        i++;
        k++;
    }

    // Copy the remaining elements of right_arr[], if any
    while (j < n2) {
        arr[k] = right_arr[j];
        j++;
        k++;
    }
}

void mergesort(int a[],int st, int dr)
{
    if (st<dr) {
        int m = (st + dr) / 2;
        mergesort(a, st, m);
        mergesort(a, m + 1, dr);


      //  merge(a,st,m,dr);
        int i = st, j = m+1, b[100]={0}, k = 0;

        while (i <= m && j <= dr) {
            if(a[i]<a[j]) {
                b[k] = a[i];
                i++;
            }
            else{
                b[k] = a[j];
                j++;
            }
            k++;
        }
        while(i<=m){
            b[k]=a[i];
            k++;
            i++;
        }
        while(j <= dr){
            b[k]=a[j];
            k++;
            j++;
        }
        for(i=0;i<k;i++)
            a[st+i]=b[i];
    }
}

int main() {
    int n;
    std::cin>>n;
    int a[n];
    for (int i=0;i<n;i++)
        std::cin>>a[i];

    mergesort(a,0,n-1);

    for (int i=0;i<n;i++)
        std::cout<<a[i]<<" ";

    return 0;
}