Cod sursa(job #2983964)

Utilizator CraniXortDumitrescul Eduard CraniXort Data 23 februarie 2023 12:44:55
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.71 kb
#include <bits/stdc++.h>

std::ifstream fin("algsort.in");
std::ofstream fout("algsort.out");


void bubble(int *x, int n) {
    for (int i = 1; i < n; i ++) {
        bool sorted = true;
        for(int j = 1; j < n; j ++) {
            if (x[j-1] > x[j]) {
                sorted = false;
                std::swap(x[j-1], x[j]);
            }
        }
        if (sorted)
            break;
    }
}

void mergeSort(int *x, int left, int right) {
    if (left == right)
        return;
    int mid = (left + right) / 2;
    mergeSort(x, left, mid);
    mergeSort(x, mid+1, right);
    std::vector <int> v;
    for(int i=left, j=mid+1;;) {
        if (i == mid + 1 and j == right + 1)
            break;
        if (i == mid + 1)
            v.push_back(x[j]), j ++;
        else if (j == right + 1)
            v.push_back(x[i]), i ++;
        else if (x[i] < x[j])
            v.push_back(x[i]), i ++;
        else v.push_back(x[j]), j ++;
    }

    for(int i = left; i <= right; i ++)
        x[i] = v[i-left];
}

void quicksort(int x[], int left, int right) {
    if(left >= right)
        return;

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

    }
    quicksort(x, left, pivot);
    quicksort(x, pivot + 1, right);
}

int main() {
    srand(time(0));
    int x[500005];
    int n;
    fin >> n;
    for (int i = 0; i < n; i ++)
        fin >> x[i];

    quicksort(x, 0, n-1);

    for (int i = 0; i < n; i++)
        fout << x[i] << ' ';
    return 0;
}