Cod sursa(job #3132915)

Utilizator Steven23XHuma Stefan-Dorian Steven23X Data 24 mai 2023 12:48:32
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <iostream>
#include <vector>
#include <fstream>

std::ifstream f("algsort.in");
std::ofstream g("algsort1.out");

int partition(std::vector<int> &arr, int start, int end)
{

    int pivot = arr[start];

    int count = 0;
    for (int i = start + 1; i <= end; i++)
    {
        if (arr[i] <= pivot)
            count++;
    }

    int pivotIndex = start + count;
    std::swap(arr[pivotIndex], arr[start]);

    int i = start, j = end;

    while (i < pivotIndex && j > pivotIndex)
    {

        while (arr[i] <= pivot)
        {
            i++;
        }

        while (arr[j] > pivot)
        {
            j--;
        }

        if (i < pivotIndex && j > pivotIndex)
        {
            std::swap(arr[i++], arr[j--]);
        }
    }

    return pivotIndex;
}

void quickSort(std::vector<int> &arr, int start, int end)
{
    if (start >= end)
        return;

    int p = partition(arr, start, end);
    quickSort(arr, start, p - 1);
    quickSort(arr, p + 1, end);
}

int main()
{
    std::vector<int> v;

    int n, elem;
    f >> n;
    for (int i = 0; i < n; i++)
    {
        f >> elem;
        v.push_back(elem);
    }

    quickSort(v, 0, v.size() - 1);

    for (int i = 0; i < v.size(); i++)
        g << v[i] << " ";

    return 0;
}