Cod sursa(job #505411)

Utilizator c_sebiSebastian Crisan c_sebi Data 2 decembrie 2010 09:35:04
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>

using namespace std;

int a[500001];


int partition(int l, int r){
    int aux, mid = (l + r) >> 1, min2;
    min = l;
    if(a[l] > a[r]) aux = a[r], a[r] = a[l], a[l] = aux;
    if(a[l] <= a[mid] && a[mid] <= a[r]) min2 = mid;
    if(a[mid] <= a[l]) min2 = l;
    if(a[r] <= a[mid]) min2 = r;
    aux = a[r], a[r] = a[min2], a[min2] = aux;

    int i = l, j = r-1;
    while(i < j){
        while(i < j && a[i] < a[r]) i++;
        while(i < j && a[j] > a[r]) j--;
        if(i < j) aux = a[i], a[i] = a[j], a[j] = aux;
    }
    aux = a[r], a[r] = a[j], a[j] = aux;
    return j;
}

void quick(int l, int r){

    if(l < r){
        int q = partition(l, r);
        quick(l, q-1);
        quick(q+1, r);
    }

}

int main(){
    ifstream f("algsort.in");
    ofstream g("algsort.out");
    int i = 0, n;
    f >> n;
    while(f>>a[i++]);
    //n = i-1;
    quick(0, n-1);
    for(i = 0; i < n; i++)
        g << a[i] << " ";
    return 0;
}