Pagini recente » Cod sursa (job #2331255) | Cod sursa (job #1658866) | Cod sursa (job #489024) | Cod sursa (job #457425) | Cod sursa (job #2276721)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
void qsort(vector<long long int> &i, int l, int r) {
if(((r - l)==1)) {
if(i[l]>i[r])
swap(i[l], i[r]);
return;
}
if((r - l)<=0)
return;
else {
int pivot;
{
int pivot_1 = i[(l + (r - l + 1)/2)];
int pivot_2 = i[l + (r - l + 1)/3];
int pivot_3 = i[l + (r - l + 1)/3*2];
if((pivot_1>pivot_2)&&(pivot_1<pivot_3))
pivot = pivot_1;
else
if((pivot_2>pivot_1)&&(pivot_2<pivot_3))
pivot = pivot_2;
else
pivot = pivot_3;
}
vector<long long int> new_list_1;
vector<long long int> new_list_2;
int pvt = 0;
for(int x = l; x<=r; x++) {
if(i[x]==pivot)
pvt++;
else
if(i[x]<pivot)
new_list_1.push_back(i[x]);
else
new_list_2.push_back(i[x]);
}
for(unsigned int x = l, y = 0; y<new_list_1.size(); x++) {
i[x] = new_list_1[y];
y++;
}
for(int x = l + new_list_1.size(), y = 0; y<pvt; x++) {
i[x] = pivot;
y++;
}
for(int x = l + new_list_1.size() + pvt, y = 0; x<=r; x++) {
i[x] = new_list_2[y];
y++;
}
qsort(i, l, l + new_list_1.size() - 1);
qsort(i, l + new_list_1.size() + pvt, r);
}
}
int main() {
int n;
in>>n;
vector<long long int> l(n);
//return 0;
for(int x = 0; x<n; x++)
in>>l[x];
qsort(l, 0, n - 1);
for(int x = 0; x<n; x++)
out<<l[x]<<' ';
}