#include #include #if __ALPHA #include #else #include #endif #include #define NUMELEMENTS (2000000) int a[NUMELEMENTS],b[NUMELEMENTS]; int c[128]; #define generateRandom(minRange,maxRange) \ (minRange)+abs(random()) % ((maxRange)-(minRange)+1) #if __ALPHA float CPUtime() { struct tms buf; times(&buf); return ((float) clock())/CLOCKS_PER_SEC; } float elapsedTime() { struct tms buf; return ((float) times(&buf))/CLK_TCK; } #else float CPUtime() { struct rusage rusage; getrusage(RUSAGE_SELF,&rusage); return rusage.ru_utime.tv_sec+rusage.ru_utime.tv_usec/1000000.0 + rusage.ru_stime.tv_sec+rusage.ru_stime.tv_usec/1000000.0; } float elapsedTime() { return (10000.0*times(NULL))/CLOCKS_PER_SEC; } #endif int intSort(const void* xin, const void* yin) { int *x,*y; x=(int*) xin; y=(int*) yin; return (*x) - (*y); } main() { unsigned int seed; int i; float startCPU,stopCPU; float startTime,stopTime; printf("enter seed\n"); scanf("%u",&seed); srandom(seed); for (i=0;i=0;i--) b[--c[a[i]%128]]=a[i]; for (i=0;i<128;i++) c[i]=0; for (i=0;i=0;i--) a[--c[(b[i]/128)%128]]=b[i]; for (i=0;i<128;i++) c[i]=0; for (i=0;i=0;i--) b[--c[a[i]/16384]]=a[i]; stopTime=elapsedTime(); stopCPU=CPUtime(); printf("radix/count elapsed time %f\n",stopTime-startTime); printf("radix/count sort CPU time %f\n",stopCPU-startCPU); printf("samples:\n"); for (i=0;i