Pagini recente » Cod sursa (job #1331684) | Cod sursa (job #152395) | Cod sursa (job #2485074) | Cod sursa (job #2870909) | Cod sursa (job #1460549)
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <vector>
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 swap(int *x, int *y){
int tmp = *x;
*x = *y;
*y = tmp;
}
int partition(int l, int r){
int pivot_index = l + rand() % (r - l + 1);
int pivot = v[pivot_index];
swap(&v[pivot_index], &v[r]);
int store_index = l;
for(int i = l; i <= r-1; ++i){
if(v[i] < pivot){
swap(&v[i], &v[store_index]);
store_index++;
}
}
swap(&v[store_index], &v[r]);
return store_index;
}
void Quicksort(int l, int r){
if(l < r){
int p = partition(l, r);
Quicksort(l, p);
Quicksort(p+1, r);
}
}
void write(){
for(int i = 1; i <= N; ++i){
out << v[i] << " ";
}
}
int main(){
read();
Quicksort(1, N);
write();
}