Pagini recente » Cod sursa (job #387475) | Cod sursa (job #883748) | Cod sursa (job #740388) | Cod sursa (job #796810) | Cod sursa (job #1460750)
#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;
}
}
void Quicksort(int l, int r){
int i = l-1, j = r, p = l-1, q = r, val = v[r];
if(r <= l) return;
for(;;){
while(v[++i] < val);
while(val < v[--j]){
if(j == l) break;
}
if( i >= j) break;
swap(v[i], v[j]);
if(v[i] == val){
p++;
swap(v[p], v[i]);
}
if(val == v[j]){
q--;
swap(v[j], v[q]);
}
}
swap(v[i], v[r]);
j = i - 1;
i = i + 1;
for(int k = l; k < p; k++, j--)
swap(v[k], v[j]);
for(int k = r - 1; k > q; k--, i++)
swap(v[i], v[k]);
Quicksort(l,j);
Quicksort(i,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();
}