Cod sursa(job #3038454)

Utilizator carinamariaCarina Maria Viespescu carinamaria Data 27 martie 2023 13:28:27
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
using namespace std;
ifstream cin("algsort.in");
ofstream cout("algsort.out");
int i, j, n, m, st, dr, mid, k;
int v[500002], w[500002];
void interclasare(int st, int mid, int dr){
    int i=st;
    int j=mid+1;
    int k=0;
    while(i<=mid && j<=dr){
        if(v[i]==v[j]){
            w[++k]=v[i];
            w[++k]=v[j];
            i++;
            j++;
        }
        else if(v[i]<v[j]){
            w[++k]=v[i];
            i++;
        }
        else{
            w[++k]=v[j];
            j++;
        }
    }
    while(i<=mid)
        w[++k]=v[i], i++;
    while(j<=dr)
        w[++k]=v[j], j++;
    for(int i=1;i<=k;i++)
        v[st+i-1]=w[i];

}
void f(int st, int dr){
    if(st>=dr)
        return ;
    int mid=(st+dr)/2;
    f(st, mid);
    f(mid+1, dr);
    interclasare(st, mid, dr);

}
int main() {
    cin>>n;
    for(i=1;i<=n;i++)
        cin>>v[i];
    f(1, n);
    for(i=1;i<=n;i++)
        cout<<v[i]<<" ";
}