Cod sursa(job #1708662)

Utilizator liviu23Liviu Andrei liviu23 Data 27 mai 2016 19:12:20
Problema Sortare prin comparare Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>
#define DIM 500005
using namespace std;

ofstream fout("algsort.out");
int n,v[DIM];

int divide(int st, int dr) {
    int i=st,j=dr-1,mij=(st+dr)/2,minim=mij;
    if(v[dr]<v[mij])
        minim=dr;
    if(v[st]>v[minim])
        swap(v[st],v[minim]);
    if(v[mij]<v[dr])
        swap(v[mij],v[dr]);
    while(i<j) {
        while(v[i]<=v[dr]&&i<j)
            i++;
        while(v[j]>=v[dr]&&i<j)
            j--;
        if(i<j) {
            swap(v[i],v[j]);
            i++,j++;
        }
    }
    swap(v[i],v[dr]);
    return i;
}

void quick_sort(int st, int dr) {
    if(st<dr) {
        int pivot=divide(st,dr);
        quick_sort(st,pivot-1);
        quick_sort(pivot+1,dr);
    }
}

int main()
{
    ifstream fin("algsort.in");

    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>v[i];
    quick_sort(1,n);
    for(int i=1;i<=n;i++)
        fout<<v[i]<<" ";
    return 0;
}