Cod sursa(job #1000446)

Utilizator mihaiSimuSimu Mihai mihaiSimu Data 22 septembrie 2013 21:02:42
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <vector>
#include <time.h>
#include <stdlib.h>
using namespace std;

int pivot(vector<int>* a,int lo,int hi) {
	int i=lo+1,j=hi;
	while(true){
		while((*a)[i]<=(*a)[lo]) {
			i++;
			if(i>=hi) break;
		}
		while((*a)[lo]<=(*a)[j]){
			j--;
			if(j<=lo) break;
		}
		if(j<=i) break;
		int aux = (*a)[i];(*a)[i]=(*a)[j];(*a)[j]=aux;
	}
	int aux = (*a)[j];(*a)[j]=(*a)[lo];(*a)[lo]=aux;
	return j;
}

void sort(vector<int>* a,int lo,int hi) {
	if(hi<=lo) return;
	int k = pivot(a,lo,hi);
	sort(a,lo,k-1);
	sort(a,k+1,hi);
}

int main(){
	int n;
	freopen("algsort.in","r",stdin);
	freopen("algsort.out","w",stdout);
	cin>>n;
	vector<int> a(n);
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	srand(time(NULL));
	for(int i=0;i<n;i++){
		int j = rand() % (i+1);
		int aux = a[i];a[i]=a[j];a[j] = aux;
	}
	sort(&a,0,n-1);
	for(int i=0;i<a.size();i++)
		cout<<a[i]<<" ";
	return 0;
}