Pagini recente » Cod sursa (job #2105554) | Cod sursa (job #1355051) | Cod sursa (job #2564898) | Cod sursa (job #1800345) | Cod sursa (job #1013083)
#include <iostream>
#include <ctime>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <vector>
using namespace std;
const int nmax = int(1e7), base = 256;
int n;
int a[nmax];
vector<int> bucket[base];
void generateData() {
srand(time(0));
n = int(1e7);
for(int i = 0;i < n;i++) {
a[i] = rand();
}
}
void LSDRadixSort() {
int p = 1;
for(int k = 0;k < 9;k++) {
for(int i = 0;i < n;i++) {
bucket[a[i]/p%10].push_back(a[i]);
}
int num = 0;
for(int digit = 0;digit < 10;digit++) {
for(int i = 0;i < (int)bucket[digit].size();i++) {
a[num++] = bucket[digit][i];
}
bucket[digit].clear();
}
p *= 10;
}
}
void lsdRadixSort() {
for(int k = 0;k < 4;k++) {
for(int i = 0;i < n;i++) {
bucket[a[i]>>(8*k) & 255].push_back(a[i]);
}
int num = 0;
for(int digit = 0;digit < base;digit++) {
for(int i = 0;i < (int)bucket[digit].size();i++) {
a[num++] = bucket[digit][i];
}
bucket[digit].clear();
}
}
}
void readData() {
for(int i = 0;i < n;i++) {
scanf("%d",&a[i]);
}
}
void printData() {
for(int i = 0;i < n;i++) {
printf("%d ",a[i]);
}
printf("\n");
}
/*
void testSort() {
double start, stop;
generateData();
memcpy(b,a,sizeof(a));
start = clock();
lsdRadixSort();
stop = clock();
printf("radix sort : %.5lf\n",(stop - start)/CLOCKS_PER_SEC);
start = clock();
sort(b,b + n);
stop = clock();
printf("stl sort : %.5lf\n",(stop - start)/CLOCKS_PER_SEC);
}
*/
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
readData();
lsdRadixSort();
printData();
return 0;
}