// Finds the k largest elements in an unsorted table by qsort (slow) // or using quicksort-style partitioning (usually fast) #include #include #include #include float elapsedCPU() { 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; } int generateRandom(minRange,maxRange) int minRange,maxRange; { /* returns integer in range minRange <= x <= maxRange*/ return minRange+abs(random()) % (maxRange-minRange+1); } void generateRandomTable(int *arr,int n,int maxrange,int seed) { int i; srandom(seed); for (i=0;in-k) high=q-1; else return; } } int intCompare(const void* xin, const void* yin) { int *x,*y; x=(int*) xin; y=(int*) yin; return (*x) - (*y); } main() { int i; int seed,n,k,maxrange; int *a; float startCPU,stopCPU; printf("enter seed, n, k, maxrange: "); fflush(stdout); scanf("%d %d %d %d",&seed,&n,&k,&maxrange); a=(int*) malloc(n*sizeof(int)); if (a==NULL) exit(0); generateRandomTable(a,n,maxrange,seed); startCPU=elapsedCPU(); quickLargest(a,n,k); stopCPU=elapsedCPU(); printf("quickLargest: The %d largest values are:\n",k); for (i=n-k;i