Cod sursa(job #2897336)

Utilizator bbia17Baicoianu Bianca bbia17 Data 3 mai 2022 15:00:32
Problema Sortare prin comparare Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 3.13 kb
////mergesort
//#include <iostream>
//#include <fstream>
//using namespace std;
//ifstream f("algsort.in");
//ofstream g("algsort.out");
//
//int N, v[100];
//
//void merge(int v[], int left, int mij, int right)
//{
//    auto const subArrayOne = mij - left + 1;
//    auto const subArrayTwo = right - mij;
//
//    auto *leftArray = new int[subArrayOne],
//            *rightArray = new int[subArrayTwo];
//
//    // Copy data to temp arrays leftArray[] and rightArray[]
//    for (auto i = 0; i < subArrayOne; i++)
//        leftArray[i] = v[left + i];
//    for (auto j = 0; j < subArrayTwo; j++)
//        rightArray[j] = v[mij + 1 + j];
//
//    auto indexOfSubArrayOne = 0,
//    indexOfSubArrayTwo = 0;
//    int indexOfMergedArray = left;
//
//    while (indexOfSubArrayOne < subArrayOne && indexOfSubArrayTwo < subArrayTwo) {
//        if (leftArray[indexOfSubArrayOne] <= rightArray[indexOfSubArrayTwo]) {
//            v[indexOfMergedArray] = leftArray[indexOfSubArrayOne];
//            indexOfSubArrayOne++;
//        }
//        else {
//            v[indexOfMergedArray] = rightArray[indexOfSubArrayTwo];
//            indexOfSubArrayTwo++;
//        }
//        indexOfMergedArray++;
//    }
//
//    while (indexOfSubArrayOne < subArrayOne) {
//        v[indexOfMergedArray] = leftArray[indexOfSubArrayOne];
//        indexOfSubArrayOne++;
//        indexOfMergedArray++;
//    }
//    // Copy the remaining elements of
//    // right[], if there are any
//    while (indexOfSubArrayTwo < subArrayTwo) {
//        v[indexOfMergedArray] = rightArray[indexOfSubArrayTwo];
//        indexOfSubArrayTwo++;
//        indexOfMergedArray++;
//    }
//}
//
//
//void mergeSort(int v[], int start, int stop)
//{
//    if (start >= stop)
//        return;
//
//    auto mij = start + (stop -start) / 2;
//    mergeSort(v, start, mij);
//    mergeSort(v, mij + 1, stop);
//    merge(v, start, mij, stop);
//}
//
//
//int main() {
//    f >> N;
//    for (int i = 0; i < N; i++)
//        f >> v[i];
//
//    mergeSort(v, 0, N - 1);
//
//    for(int i = 0; i < N; i++)
//        g << v[i] << " ";
//
//    return 0;
//}

//MERGE SORT
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");

int N, v[100000];
void merge(int *v, int left, int right, int mid)
{
    int i, j, k, c[10000];
    i = left;
    k = left;
    j = mid + 1;
    while (i <= mid && j <= right) {
        if (v[i] < v[j]) {
            c[k] = v[i];
            k++;
            i++;
        }
        else  {
            c[k] = v[j];
            k++;
            j++;
        }
    }
    while (i <= mid) {
        c[k] = v[i];
        k++;
        i++;
    }
    while (j <= right) {
        c[k] = v[j];
        k++;
        j++;
    }
    for (i = left; i < k; i++)  {
        v[i] = c[i];
    }
}

void merge_sort(int *v, int left, int right)
{
    if (left < right){
        int mid=(left+right)/2;
        merge_sort(v,left,mid);
        merge_sort(v,mid+1,right);
        merge(v,left,right,mid);
    }
}

int main()
{
    f >> N;
    for (int i = 0; i < N; i++)
        f >> v[i];
    merge_sort(v, 0, N-1);
    for (int i = 0; i < N; i++)
        g << v[i] << " ";
}