Cod sursa(job #3128879)

Utilizator RaicanMihaiRaican Mihai RaicanMihai Data 11 mai 2023 11:34:11
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.9 kb
#include <iostream>
using namespace std;

// MergeSort(arr[], l,  r)
// If r > l

// Find the middle point to divide the array into two halves: 
// middle m = l + (r – l)/2
// Call mergeSort for first half:   
// Call mergeSort(arr, l, m)
// Call mergeSort for second half:
// Call mergeSort(arr, m + 1, r)
// Merge the two halves sorted in steps 2 and 3:
// Call merge(arr, l, m, r)


void merge(int arr[], int l, int m, int r)
{
    int i, j, k;
    int n1 = m - l + 1;
    int n2 = r - m;
 
    /* create temp arrays */
    int L[n1], R[n2];
 
    /* Copy data to temp arrays L[] and R[] */
    for (i = 0; i < n1; i++)
        L[i] = arr[l + i];
    for (j = 0; j < n2; j++)
        R[j] = arr[m + 1 + j];
 
    /* Merge the temp arrays back into arr[l..r]*/
    i = 0; // Initial index of first subarray
    j = 0; // Initial index of second subarray
    k = l; // Initial index of merged subarray
    while (i < n1 && j < n2) {
        if (L[i] <= R[j]) {
            arr[k] = L[i];
            i++;
        }
        else {
            arr[k] = R[j];
            j++;
        }
        k++;
    }
 
    /* Copy the remaining elements of L[], if there
    are any */
    while (i < n1) {
        arr[k] = L[i];
        i++;
        k++;
    }
 
    /* Copy the remaining elements of R[], if there
    are any */
    while (j < n2) {
        arr[k] = R[j];
        j++;
        k++;
    }
}

void mergeSort(int v[], int left, int right) {
    if (left < right) {

        int middle = (left + right) / 2;
        mergeSort(v, left, middle);
        mergeSort(v, middle + 1, right);
        merge(v, left, middle, right);
    }
}

int main() {
    int n = 6, v[] = {4, 1, 7, 5, 1, 3};
    for (int i = 0; i < 6; i++)
        cout << v[i] << " " << endl;

    mergeSort(v, 0, n - 1);

    for (int i = 0; i < 6; i++)
        cout << v[i] << " ";
    return 0;
}