/* a-wada/qsortlib/ccg/qsortapi.c Mar. 9, 2008 */ /* Copyright (c) 2008 Akira Wada */ /* <<< Example of QSORTBASE to generate sort subroutine >>> */ /* A template of quick sort for the array of pointers to */ /* an object with large or variable length, etc */ /** define the object to be sorted **/ typedef struct { int nmb; char *grp; double sum; int eqv; char text[108];} typeA; /** specify the sorting parameters **/ #define QSNAME qsortapi #define ARGSP typeA **P, int N #define COMPP(i, j) ((*j)->eqv - (*i)->eqv) /* descending */ #define SWAPP(i, j) t = *i, *i = *j, *j = t #define ROTATEP(i, j, k) t = *i, *i = *j, *j = *k, *k = t /** call the sorting algorithm (QSORTBASE) **/ #define ARGS ARGSP typedef typeA ** PTRTYP; #define DFWRK STACK; typeA *t #define VALID N > 1 #define HSKP l = P, r = l + (N - 1) #define ESZ 1 #define COMP(i, j) COMPP (i, j) #define SWAP(i, j) SWAPP (i, j) #define ROTATE(i, j, k) ROTATEP (i, j, k) #define CLNUP /* nothing */ #define STACK PTRTYP s[STKSZ], *p = s + STKSZ #define STKSZ sizeof (size_t) * 8 * 2 #define PUSH(x, y) p -= 2, *(p + 1) = x, *p = y #define EMPTY (p >= s + STKSZ) #define POP(y, x) y = *p, x = *(p + 1), p += 2 #include "qsortbase.h" QSORTBASE (QSNAME) /* a-wada/qsortlib/ccg/qsortapi.c end */ /* *** For some objects, faster than radix-sort *** D:\a-wada\borlandc>qssn <-! call radixspi-ar.c thru qsortsn.c N MS rmd std cf al dgx 100000 0 100000000 0 7 SEED= 0 cmpf == 7 c = 0 600000 600000 0 0 0 0 0 0 m = 400000 400000 0 0 0 0 0 0 t = 0.18 sec SEED = 1205314856 D:\a-wada\borlandc>qsapi <- call qsortapi.c N MS rmd std cf al dgx 100000 0 100000000 SEED= 1205314856 cmpf == 6 c = 0 1601201 0 0 0 0 0 1601201 0 m = 824922 0 0 0 0 0 824922 0 t = 0.16 sec SEED = 1205314856 ** more faster, http://www.mars.dti.ne.jp/~a-wada/qsortlib/ccg/qsortapi.asm ** D:\a-wada\borlandc>qsapia <- call qsortapi.asm N MS rmd std cf al dgx 100000 0 100000000 SEED= 1205314856 cmpf == 6 c = 0 0 0 0 0 0 0 0 0 m = 0 0 0 0 0 0 0 0 t = 0.13 sec SEED = 1205314856 D:\a-wada\borlandc> */