Cod sursa(job #2984969)

Utilizator GFA03Gavrila Florin-Alexandru GFA03 Data 25 februarie 2023 12:48:28
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.74 kb
#include <bits/stdc++.h>

void bubble_sort(int v[], int n)
{
    bool ok;
    do{
        ok = false;
        for(int i = 0; i < n-1; i++)
            if(v[i] > v[i+1]) {std::swap(v[i], v[i+1]); ok = true;}
    }while(ok);
}

void selection_sort(int v[], int n)
{
    for(int i = 0; i < n-1; i++)
        for(int j = i + 1; j < n; j++)
        {
            if(v[i] > v[j]) std::swap(v[i], v[j]);
        }
}

int tmp[500005];

void merge_sort(int v[], int left, int right)
{
    if(left < right)
    {
        int m = (left + right) / 2;
        merge_sort(v, left, m);
        merge_sort(v, m+1, right);
        int i = left, j = m+1, k = 0;
        while(i <= m && j <= right)
        {
            if(v[i] < v[j]) tmp[k++] = v[i++];
            else tmp[k++] = v[j++];
        }
        while(i <= m) tmp[k++] = v[i++];
        while(j <= right) tmp[k++] = v[j++];
        for(int i = left, j = 0; i <= right; i++, j++)
            v[i] = tmp[j];
    }
}

int partition(int v[], int left, int right)
{
    int pivot = v[(left+right) / 2], i = left - 1, j = right + 1;
    while(true)
    {
        do{i = i + 1;}while(v[i] < pivot);
        do{j = j - 1;}while(v[j] > pivot);
        if(i >= j) return j;
        std::swap(v[i], v[j]);
    }
}

void quicksort(int v[], int left, int right)
{
    if(left >= 0 && right >= 0 && left < right)
    {
        int pi = partition(v, left, right);
        quicksort(v, left, pi);
        quicksort(v, pi+1, right);
    }
}

int main()
{
    int v[500005], n;
    std::ifstream f1("algsort.in");
    std::ofstream f2("algsort.out");
    f1 >> n;
    for(int i = 0; i < n; i++)  f1 >> v[i];
    quicksort(v, 0, n-1);
    for(int i = 0; i < n; i++) f2 << v[i] << " ";
}