# Gaussian sort

a guest
Jun 9th, 2011
130
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. #include <cstdio>
2. #include <cstring>
3. #include <cstdlib>
4. #include <iostream>
5. #include <algorithm>
7. using namespace std;
8. const size_t size=50000000;
9. void s(double ** bucketsstart, double** bucketsend, int start,int delta, int numbuckets){
10.     for (;start<=numbuckets; start+=delta)
11.         sort(bucketsstart[start],bucketsend[start]);
12. }
13. int main(){
14.     double *data=new double[size];
15.     FILE *f = fopen("gaussian.dat", "rb");
17.     FILE* h=fopen("helper.txt","rb");
18.     int numbuckets;
20.     int dscale;
22.     double dmin; //minimum value of tabularised distribution
23.     double dmax; //,aximum ditto
26.     //int minn=dmin*dscale;
27.     int ile;
29.     int *tab=new int[ile];
32.     double * databuckets=new double [size*4+size/numbuckets*4]; //just to be sure
33.     double ** bucketsstart= new double* [numbuckets+1];// pointer to beggining of every bucket
34.     double ** bucketsend= new double* [numbuckets+1]; //pointer to end
35.     int offset=4*size/numbuckets;
36.     for (int i=0; i<numbuckets+1; i++){
37.         bucketsend[i]=bucketsstart[i]=databuckets+i*offset;
38.     }
39.     for (int i=0; i<size; i++){
40.         if (data[i]>dmax) {
41.             *bucketsend[numbuckets]++=data[i];
42.         }
43.         else if (data[i]<dmin) *bucketsend[0]++=data[i];
44.         else {
45.             *bucketsend[tab[(int)((data[i]-dmin)*dscale)]]++=data[i];
46.         }
47.     }
50.     for (int i=0; i<numthreads; i++){
52.     }
53.     for (int i=0; i<numthreads; i++){
54.         thr[i]->join();
55.         delete thr[i];
56.     }
57.     delete [] thr;
58.     double* currData=data;
59.     for (int i=0; i<=numbuckets; i++){
60.         memcpy(currData,bucketsstart[i],(bucketsend[i]-bucketsstart[i])*8);
61.         currData+=bucketsend[i]-bucketsstart[i];
62.     }
63.     //for (int i=0; i<size-1; i++){
64.     //  if (data[i]>data[i+1]) cout<<i<<' '<<data[i]<<' '<<data[i+1]<<endl;
65.     //}
66.
67.     //fwrite(data,8,size,stdout);
68.     fclose(h);
69.     fclose(f);
70. }
RAW Paste Data