Pagini recente » Rating Oana Fiat (oana_f) | Cod sursa (job #3285028) | Utilizatori inregistrati la .com 2012 - Runda 1 | Rating Robert Sandu (Mirage) | Cod sursa (job #3291694)
#include <algorithm>
#include <iostream>
#include<vector>
#include<string>
#include<fstream>
#include <sstream>
std::ifstream f("algsort.in");
std::ofstream fo("algsort.out");
std::vector<long long>a;
void quick_sort(std::vector<long long>&a, long long st, long long dr) {
if (st >= dr) {
return;
}
long long piv[3];
piv[0]=st+std::rand()%(dr-st+1);
piv[1]=st+std::rand()%(dr-st+1);
piv[2]=st+std::rand()%(dr-st+1);
int i=0;
if ((a[piv[0]]<=a[piv[1]] && a[piv[1]]<=a[piv[2]])||(a[piv[0]]>=a[piv[1]] && a[piv[1]]>=a[piv[2]]) ) {
i=1;
}
if ((a[piv[0]]<=a[piv[2]] && a[piv[2]]<=a[piv[1]])||(a[piv[0]]>=a[piv[2]] && a[piv[2]]>=a[piv[1]]) ) {
i=2;
}
std::swap(a[dr],a[piv[i]]);
//std::cout<<piv[1]<<piv[2]<<piv[0]<<std::endl;
long long pivot=a[dr];
long long k=st;
long long less=st;
long long more=dr;
while (k<=more){
if (a[k]<pivot) {
std::swap(a[less],a[k]);
k++;
less++;
}
else if (a[k]>pivot) {
std::swap(a[k],a[more]);
more--;
}
else k++;;
}
quick_sort(a,st,less-1);
quick_sort(a,more+1,dr);
}
void bucketSort(std::vector<long long>&a,long long n,long long nr=10000) {
long long mi=*std::min(a.begin(),a.end());
long long ma=*std::max(a.begin(),a.end());
long long size=(ma-mi)/nr;
if (size==0)
size=1;
std::vector<std::vector<long long>>bucket(nr);
for (long long i=0;i<n;i++) {
long long poz=(a[i]-mi)/size;
bucket[poz].push_back(a[i]);
}
for (long long i=0;i<nr;i++) {
std::sort(bucket[i].begin(),bucket[i].end());
}
long long k=0;
for (long long i=0;i<nr;i++) {
for (long long j=0;j<bucket[i].size();j++) {
a[k++]=bucket[i][j];
}
}
}
int main()
{ long long n;
f>>n;
for (long long i=1;i<=n;i++) {
long long x;
f>>x;
a.push_back(x);
}
bucketSort(a,n);
for(long long i=0;i<n;i++)
fo<<a[i]<<" ";
return 0;
}