Cod sursa(job #3291694)

Utilizator G3K0Airinei Gabriel Vlad G3K0 Data 5 aprilie 2025 12:22:15
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.05 kb
#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;
}