Pagini recente » Cod sursa (job #2740549) | Cod sursa (job #1844851) | Cod sursa (job #2406776) | Cod sursa (job #640631) | Cod sursa (job #1460749)
#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();
}