Cod sursa(job #2693446)

Utilizator SerbaP123Popescu Serban SerbaP123 Data 5 ianuarie 2021 23:08:26
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.85 kb
#include <fstream>
#define nmax 500001
using namespace std;

ifstream cin("algsort.in");
ofstream cout("algsort.out");

void merge(int arr[], int low, int mid, int high){
    int elementsFirstVector = mid - low + 1, elementsSecondVector = high - mid;
    int firstVector[elementsFirstVector], secondVector[elementsSecondVector];
    for(int i = 0; i < elementsFirstVector; ++i){
        firstVector[i] = arr[low + i];
    }
    for(int i = 0; i < elementsSecondVector; ++i){
        secondVector[i] = arr[mid + i + 1];
    }
    int indexFirstVector = 0, indexSecondVector = 0, indexMerge = low;
    while(indexFirstVector < elementsFirstVector && indexSecondVector < elementsSecondVector){
        if(firstVector[indexFirstVector] <= secondVector[indexSecondVector]){
            arr[indexMerge] = firstVector[indexFirstVector];
            indexFirstVector++;
        }
        else{
            arr[indexMerge] = secondVector[indexSecondVector];
            indexSecondVector++;
        }
        indexMerge++;
    }
    while(indexFirstVector < elementsFirstVector){
        arr[indexMerge] = firstVector[indexFirstVector];
        indexFirstVector++;
        indexMerge++;
    }
    while(indexSecondVector < elementsSecondVector){
        arr[indexMerge] = secondVector[indexSecondVector];
        indexSecondVector++;
        indexMerge++;
    }
}

void mergeSort(int arr[], int low, int high){
    if(low >= high){
        return;
    }
    int mid = (low + high - 1) / 2;
    mergeSort(arr, low, mid);
    mergeSort(arr, mid + 1, high);
    merge(arr, low, mid, high);
}

int main(){
    int arr[nmax], numbers;
    cin >> numbers;
    for(int i = 1; i <= numbers; ++i){
        cin >> arr[i];
    }
    mergeSort(arr, 1, numbers);
    for(int i = 1; i <= numbers; ++i){
        cout << arr[i] << " ";
    }
    return 0;
}