Pagini recente » Cod sursa (job #1506452) | Cod sursa (job #18194) | Cod sursa (job #494359) | Cod sursa (job #215017) | Cod sursa (job #485337)
Cod sursa(job #485337)
#include<fstream>
#include<iostream>
using namespace std;
void radix_sort(int byte, int n ,unsigned long *src, unsigned long *dest)
{
unsigned long count[256]={0};
unsigned long index[256]={0};
for(int i=0; i<n; ++i)
count[(src[i]>>(byte<<3))&0xff]++;
for(int i=1; i<256; ++i)
index[i]=index[i-1]+count[i-1];
for(int i=0; i<n; ++i)
dest[index[(src[i]>>(byte<<3))&0xff]++]=src[i];
}
void radix_sort16(int byte, int n ,unsigned long *src, unsigned long *dest)
{
unsigned long long count[0xffff]={0};
unsigned long long index[0xffff]={0};
for(int i=0; i<n; ++i)
count[(src[i]>>(byte<<4))&0xffff]++;
for(int i=1; i<0xffff; ++i)
index[i]=index[i-1]+count[i-1];
for(int i=0; i<n; ++i)
dest[index[(src[i]>>(byte<<4))&0xffff]++]=src[i];
}
int main()
{
int n;
unsigned long *a;
unsigned long *b;
fstream fin("algsort.in", fstream::in);
fstream fout("algsort.out", fstream::out);
//double x;
//unsigned long long *y;
//y=reinterpret_cast<unsigned long long*>(&x);
fin>>n;
a=new unsigned long[n];
b=new unsigned long[n];
for(int i=0; i<n; ++i)
{
fin>>a[i];
//cout<<a[i]<<" ";
}
//cout<<endl;
/*radix_sort(0,n,a,b);
radix_sort(1,n,b,a);
radix_sort(2,n,a,b);
radix_sort(3,n,b,a);*/
radix_sort16(0,n,a,b);
radix_sort16(1,n,b,a);
for(int i=0; i<n; ++i)
fout<<a[i]<<" ";
fout<<endl;
delete a;
delete b;
fin.close();
fout.close();
return 0;
}