Cod sursa(job #1460750)

Utilizator glbglGeorgiana bgl glbgl Data 13 iulie 2015 20:04:07
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
ifstream in("algsort.in");
ofstream out("algsort.out");
 
int N;
vector<int> v;
 
void read(){
 
    in >> N;
    v.resize(N+1);
    int x;
    for(int i = 1; i <= N; ++i){
        in >> x;
        v[i] = x;
    }
}
 
void Quicksort(int l, int r){

	int i = l-1, j = r, p = l-1, q = r, val = v[r];
	if(r <= l) return;

	for(;;){
		while(v[++i] < val);
		while(val < v[--j]){
			if(j == l) break;
		}
		if( i >= j) break;
		swap(v[i], v[j]);
		if(v[i] == val){
			p++;
			swap(v[p], v[i]);
		}
		if(val == v[j]){
			q--;
			swap(v[j], v[q]);
		}
	}

	swap(v[i], v[r]);
	j = i - 1;
	i = i + 1;
	for(int k = l; k < p; k++, j--)
		swap(v[k], v[j]);
	for(int k = r - 1; k > q; k--, i++)
		swap(v[i], v[k]);
	Quicksort(l,j);
	Quicksort(i,r);
}
 
void write(){
 
    for(int i = 1; i <= N; ++i){
        out << v[i] << " ";
    }
}
 
 
int main(){
 
 	ios::sync_with_stdio(false);
    read();
    Quicksort(1, N);
    write();
}