Pagini recente » Cod sursa (job #459787) | Cod sursa (job #202178) | Cod sursa (job #1057764) | Cod sursa (job #245743) | Cod sursa (job #1049084)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
void exchg(int&a, int&b){
int aux = a;a=b;b=aux;
}
int pivot(vector<int>& v, int from, int to) {
int pivotPos = from + (rand() % (to-from+1));
int aux = v[from];
v[from] = v[pivotPos];
v[pivotPos] = aux;
pivotPos = from;
for(int i=from+1; i<=to;i++) {
if(v[i] < v[pivotPos]) {
exchg(v[pivotPos], v[pivotPos+1]);
if(i!=pivotPos+1)
exchg(v[pivotPos], v[i]);
pivotPos++;
}
}
return pivotPos;
}
int pivot2(vector<int>& v, int from, int to) {
int p = v[from + (rand() % (to-from+1))];
int i = from;
int j = to;
while(true) {
while(v[j] >= p) j--;
while(v[i] < p) i++;
if(i<j)
exchg(v[i],v[j]);
else
return j;
}
return 0;
}
void mysort(vector<int>& v, int from, int to) {
if(from>=to) return;
int k = pivot2(v, from, to);
mysort(v, from, k-1);
mysort(v, k+1, to);
}
void kthElement(vector<int>& v,int from, int to, int k) {
if(from>to)
return;
int m = pivot2(v, from, to);
int dist = m-from;
if(dist > k) {
kthElement(v, from, m-1, k);
}
if (dist < k) {
kthElement(v, m+1, to, k-dist-1);
}
}
int main() {
int n,k, x;
ifstream in("algsort.in");
ofstream out("algsort.out");
//in>>n>>k;
in>>n;
vector<int> v(n);
for(int i=0;i<n;i++) {
in>>x;v[i] = x;
}
mysort(v, 0, v.size()-1);
for(int i=0;i<v.size();i++) {
out<<v[i]<<" ";
}
//kthElement(v,0,v.size()-1,k-1);
//out<<v[k-1];
return 0;
}