Cod sursa(job #3211129)

Utilizator radu.deaconuDeaconu Radu-Andrei radu.deaconu Data 8 martie 2024 16:33:14
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2 kb
#include <iostream>
#include <vector>

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 a[]={12, 5, 10,4, 13, 11, 2, 8},n=8;
    for (int i=0;i<n;i++)
        std::cout<<a[i]<<" ";
    std::cout<<"\n";

    mergesort(a,0,n-1);

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

    return 0;
}