aug@cybvax0.UUCP (Amit Alan Green) (08/27/85)
I want to be able to use qsort(1) on different machine. Below is my first attempt to simulating this; however: 1. Does anyone have a pubic-domain version of this which actually uses quick-sort rather than shell-mertzner sort? (Does anyone know the relative merits of these two sorts?) 2. Can the internal loop for switching the items be improved (bcopy(1) maybe?) Please respond by mail. ------ /* * This is an attempted simulation of qsort(1) from BSD 4.2 using * a shell-merztner sort. */ typedef int (*pfuncint) () ; qsort (av, ac, size, func) char *av; int ac; int size; pfuncint func; { int binary; int bytes; int cnt; int cnt2; register int i; register char *swap1; register char *swap2; char swapi; bytes = ac * size; for (binary = ac >> 1 ; binary > 0 ; binary >>= 1) { cnt = binary * size; for (cnt2 = cnt ; cnt2 < bytes ; cnt2 += size) { for (swap1 = av + (cnt2 - cnt) ; swap1 >= av && (*func) (swap1, swap2 = swap1 + cnt) > 0; swap1 -= cnt) { for (i = 0 ; i < size ; i ++) { swapi = swap1[i]; swap1[i] = swap2[i]; swap2[i] = swapi; } } } } }