Cod sursa(job #2898385)

Utilizator mbrianaMerealbe Cris-Briana mbriana Data 6 mai 2022 17:14:58
Problema Sortare prin comparare Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int arr[500001];
int partitie(int start, int finish)
{

    int pivot = arr[start];

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

    int index_pivot = start + nr;
    swap(arr[index_pivot], arr[start]);

    int i = start, j = finish;

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

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

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

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

    return index_pivot;
}

void quickSort(int start, int finish)
{

    if (start >= finish)
        return;

    int p = partitie(start, finish);

    quickSort(start, p - 1);

    quickSort(p + 1, finish);
}

int main()
{
    int n;
    f>>n;
    for(int i = 0; i < n; i++)
        f>>arr[i];

    quickSort(0, n - 1);

    for (int i = 0; i < n; i++) {
        g << arr[i] << " ";
    }

    f.close();
    g.close();
    return 0;
}