Cod sursa(job #1000447)

Utilizator mihaiSimuSimu Mihai mihaiSimu Data 22 septembrie 2013 21:07:09
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
#include <iostream>
#include <vector>
#include <random>
#include <time.h>
#include <stdlib.h>
using namespace std;
int n,x;
vector<int> a;
 
int choosePivot(int from,int to){
    int r= rand()%(to-from+1)+from;
    int aux;
    aux=a[r];a[r]=a[from];a[from]=aux;
     
    int pivot=a[from];int pos=from;
    for(int i=from+1;i<=to;i++){
        if(a[i]<pivot){
            aux=a[i];
            a[i]=a[pos+1];
            a[pos+1]=aux;
 
            aux=a[pos+1];
            a[pos+1]=a[pos];
            a[pos]=aux;
 
            pos++;
        }
    }
    return pos;
}
 
void quickSort(int from,int to){
    if(from>=to) return;
    int pivot = choosePivot(from,to);
    quickSort(from,pivot-1);
    quickSort(pivot+1,to);
}
 
int main(){
 
    ifstream in("algsort.in");
    ofstream out("algsort.out");
    in>>n;
    for(int i=0;i<n;i++){in>>x;a.push_back(x);}
    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;
	}
	quickSort(0,a.size()-1);
 
    for(int i=0;i<a.size();i++){
        out<<a[i]<<" ";
    }
     
    return 0;
}