Cod sursa(job #3179124)

Utilizator razviOKPopan Razvan Calin razviOK Data 3 decembrie 2023 00:59:12
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <stdio.h>
#include <stdlib.h>

void Merge(int *arr,int low,int mid,int high){

    int numA=mid-low+1;
    int numB=high-mid;
    int numC=high-low+1;
    int *A=(int *) malloc(sizeof(int)*numA);
    int *B=(int *) malloc(sizeof(int)*numB);
    int *C=(int *) malloc(sizeof(int)*numC);

    for(int i=0;i<numA;i++)
        A[i]=arr[low+i];

    for(int j=0;j<numB;j++)
        B[j]=arr[mid+1+j];

    int i=0;
    int j=0;
    int k=0;
    while(i<numA && j<numB){
        if(A[i]<B[j])
            C[k++] = A[i++];
        else C[k++]=B[j++];
    }

    while(i<numA)
        C[k++]=A[i++];

    while(j<numB)
        C[k++]=B[j++];

    for(int i=0;i<k;i++)
        arr[low+i]=C[i];

    free(A);
    free(B);
    free(C);

}
void MergeSort(int *arr,int low,int high){

    if(low<high){

        int mid=low+(high-low)/2;
        MergeSort(arr,low,mid);
        MergeSort(arr,mid+1,high);

        Merge(arr,low,mid,high);
    }
}
int main() {

    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    int n;
    scanf("%d",&n);
    int *arr=(int *) malloc(sizeof(int)*n);
      for(int i=0;i<n;i++)
          scanf("%d",&arr[i]);

    MergeSort(arr,0,n-1);


    for(int i=0;i<n;i++)
        printf("%d ",arr[i]);

    free(arr);
    return 0;
}