Engineering a Sort Function
Jim Royer
CIS 351
February 4, 2019
Royer (CIS 351) Engineering a Sort Function February 4, 2019 1 / 16
Engineering a Sort Function Jim Royer CIS 351 February 4, 2019 - - PowerPoint PPT Presentation
Engineering a Sort Function Jim Royer CIS 351 February 4, 2019 Royer (CIS 351) Engineering a Sort Function February 4, 2019 1 / 16 Bentley and MacIlroy, 1993 Engineering a Sort Function JON L. BENTLEY M. DOUGLAS McILROY AT&T Bell
Royer (CIS 351) Engineering a Sort Function February 4, 2019 1 / 16
JON L. BENTLEY
Royer (CIS 351) Engineering a Sort Function February 4, 2019 2 / 16
Royer (CIS 351) Engineering a Sort Function February 4, 2019 3 / 16
Royer (CIS 351) Engineering a Sort Function February 4, 2019 4 / 16
Royer (CIS 351) Engineering a Sort Function February 4, 2019 5 / 16
Royer (CIS 351) Engineering a Sort Function February 4, 2019 6 / 16
Royer (CIS 351) Engineering a Sort Function February 4, 2019 7 / 16
Royer (CIS 351) Engineering a Sort Function February 4, 2019 8 / 16
Royer (CIS 351) Engineering a Sort Function February 4, 2019 9 / 16
a:b b:c < b:c >
< a:c >
<
> a:c <
>
<
>
static char *med3(char *a, char *b, char *c, int (*cmp)()) { return cmp(a, b) < 0 ? (cmp(b, c) < 0 ? b : cmp(a, c) < 0 ? c : a) : (cmp(b, c) > 0 ? b : cmp(a, c) > 0 ? c : a); }
Program 5. Decision tree and program for median of three Royer (CIS 351) Engineering a Sort Function February 4, 2019 10 / 16
Royer (CIS 351) Engineering a Sort Function February 4, 2019 11 / 16
void iqsort2(int *x, int n) { int a, b, c, d, l, h, s, v; if (n <= 1) return; v = x[rand() % n]; a = b = 0; c = d = n-1; for (;;) { while (b <= c && x[b] <= v) { if (x[b] == v) iswap(a++, b, x); b++; } while (c >= b && x[c] >= v) { if (x[c] == v) iswap(d--, c, x); c--; } if (b > c) break; iswap(b++, c--, x); } s = min(a, b-a); for(l = 0, h = b-s; s; s--) iswap(l++, h++, x); s = min(d-c, n-1-d); for(l = b, h = n-s; s; s--) iswap(l++, h++, x); iqsort2(x, b-a); iqsort2(x + n-(d-c), d-c); }
Program 6. An integer qsort with split-end partitioning
= < ? > = a b c d
= < > = a b c d
< = > Royer (CIS 351) Engineering a Sort Function February 4, 2019 12 / 16
Royer (CIS 351) Engineering a Sort Function February 4, 2019 13 / 16
Royer (CIS 351) Engineering a Sort Function February 4, 2019 14 / 16
Royer (CIS 351) Engineering a Sort Function February 4, 2019 15 / 16
Royer (CIS 351) Engineering a Sort Function February 4, 2019 16 / 16
Results
Table II VAX 8550 MIPS R3000 Type 7th Edition Berkeley New 7th Edition Berkeley New integer 1.25 0.80 0.60 0.75 0.41 0.11 float 1.39 0.89 0.70 0.73 0.43 0.14 double 1.78 1.23 0.91 1.33 0.78 0.19 record 3.24 2.01 0.92 3.10 1.75 0.26 pointer 2.48 2.10 1.73 1.09 0.73 0.41 string 3.89 2.82 1.67 3.41 1.83 0.37 (Overall counts of noncommentary source, pretty-printed by the Unix cb utility, are Table III CPU Seconds Sort VAX 8550 MIPS R3000 General qsort, Program 7 7.24 2.02 Specialized to es==sizeof(char*) 7.28 1.74 Specialized to ints 3.49 1.63 Basic integer Quicksort, Program 3 4.40 1.77