2 * qsort -- simple quicksort
10 int (*cmp)(void*, void*);
11 void (*swap)(char*, char*, usize);
16 swapb(char *i, char *j, usize es)
30 swapi(char *ii, char *ij, usize es)
45 pivot(char *a, usize n, Sort *p)
53 pj = pi + j; /* 1/2 */
54 pk = pj + j; /* 5/6 */
55 if(p->cmp(pi, pj) < 0) {
56 if(p->cmp(pi, pk) < 0) {
57 if(p->cmp(pj, pk) < 0)
63 if(p->cmp(pj, pk) < 0) {
64 if(p->cmp(pi, pk) < 0)
72 qsorts(char *a, usize n, Sort *p)
91 while(pi < pn && p->cmp(pi, a) < 0);
94 while(pj > a && p->cmp(pj, a) > 0);
107 qsorts(a + (j+1)*es, n, p);
114 qsort(void *va, usize n, usize es, int (*cmp)(void*, void*))
121 if(((uintptr)va | es) % sizeof(long))
123 qsorts((char*)va, n, &s);