/* qsort example */ #include #include typedef struct tableEntry tableType; struct tableEntry { int num; char *wrd; }; tableType *table; int tableSize; void readTable() { int i,j,k; char buffer[81]; scanf("%d",&tableSize); table=(tableType*) malloc(tableSize*sizeof(tableType)); if (!table) { printf("malloc fail\n"); exit(0); } for (i=0;inum - y->num; } void sortByNumber() { qsort((void*) table,tableSize,sizeof(tableType),numCompare); } int strCompare(x,y) tableType *x,*y; { return strcmp(x->wrd,y->wrd); } void sortByWord() { qsort((void*) table,tableSize,sizeof(tableType),strCompare); } int revStrCompare(x,y) tableType *x,*y; { return strcmp(y->wrd,x->wrd); } void reverseSortByWord() { qsort((void*) table,tableSize,sizeof(tableType),revStrCompare); } main() { readTable(); printf("Input:\n"); printTable(); sortByNumber(); printf("Sorted by number:\n"); printTable(); sortByWord(); printf("Sorted by word:\n"); printTable(); reverseSortByWord(); printf("Reverse sorted by word:\n"); printTable(); } [weems@reptar~/docs/NOTES2320:96] cc qsortExample.c using gcc [weems@reptar~/docs/NOTES2320:97] cat veryshort.in 5 300dog 212cat 443pizza 867coke 342asparagus [weems@reptar~/docs/NOTES2320:98] a.out < veryshort.in Input: 300 dog 212 cat 443 pizza 867 coke 342 asparagus Sorted by number: 212 cat 300 dog 342 asparagus 443 pizza 867 coke Sorted by word: 342 asparagus 212 cat 867 coke 300 dog 443 pizza Reverse sorted by word: 443 pizza 300 dog 867 coke 212 cat 342 asparagus // Finds the kth element 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;i