Cod sursa(job #2512093)

Utilizator cristian51090Oanta Cristian cristian51090 Data 20 decembrie 2019 16:04:24
Problema Sortare prin comparare Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
#include <fstream>
using namespace std;
template <typename BidIt, typename Pred>
void pancake_sort(BidIt first, BidIt last, Pred order)
{
    if (distance(first, last) < 2) return; // no sort needed
    for (; first != last; --last)
    {
        BidIt mid = max_element(first, last, order);
        if (mid == last - 1)
        {
            continue; // no flips needed
        }
        if (first != mid)
        {
            reverse(first, mid + 1); // flip element to front
        }
        reverse(first, last); // flip front to final position
    }
}

// pancake sort template (ascending order)
template <typename BidIt>
void pancake_sort(BidIt first, BidIt last)
{
    pancake_sort(first, last,less<typename std::iterator_traits<BidIt>::value_type>());
}

int main()
{
    ifstream fin("algsort.in");
    ofstream fout("algsort.out");
    vector<int> data;
    int n,i,j;
    fin>>n;
    for(i=1;i<=n;i++){
        fin>>j;
        data.push_back(j);
    }

    pancake_sort(data.begin(), data.end()); // ascending pancake sort

    copy(data.begin(), data.end(), ostream_iterator<int>(fout, " "));
}