Cod sursa(job #1460749)

Utilizator glbglGeorgiana bgl glbgl Data 13 iulie 2015 19:51:53
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 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;
    }
}
 
int partition(int pivot, int l, int r){

	
	int store_indx = l;


	for(int i = l; i <= r-1; ++i){
		if(v[i] < pivot){
			swap(v[i], v[store_indx]);
			store_indx++;
		}
	}
	swap(v[store_indx], v[r]);
	return store_indx;
}

void Quicksort(int l, int r){

	if(l < r){
		int indx = l + (r - l)/2;
		int pivot = v[indx];
		swap(v[indx], v[r]);
		int left = partition(pivot, l, r);


		int pivot_index = l + rand() % (r - l + 1);
    	int p = v[pivot_index];
    	//swap(v[pivot_index], v[r]);

		int right = partition(p, l, r);

		Quicksort(l, left);
		Quicksort(right, 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();
}