Version 0.4 is complete and up at:
http://ff123.net/bootstrap/bootstrap04.zip
It implements bootstrap free step-down p-value adjustment. Just type:
bootstrap aq1.txt
This will run 10,000 bootstrap trials of the AQ1 data, and the results will be:
BOOTSTRAP version 0.4, Nov 10, 2001
Input file : aq1.txt
Read 8 treatments, 42 samples
Unadjusted p-values
dm-std dm-xtrm dm-ins cbr256 abr224 r3mix cbr192
mpc 0.174 0.075 0.010* 0.003* 0.001* 0.000* 0.000*
dm-std - 0.673 0.218 0.113 0.056 0.026* 0.000*
dm-xtrm - - 0.418 0.243 0.136 0.070 0.000*
dm-ins - - - 0.721 0.496 0.315 0.006*
cbr256 - - - - 0.746 0.517 0.015*
abr224 - - - - - 0.746 0.036*
r3mix - - - - - - 0.075
Each '.' is 1,000 resamples. Each '+' is 10,000 resamples
.........+
Adjusted p-values
dm-std dm-xtrm dm-ins cbr256 abr224 r3mix cbr192
mpc 0.684 0.442 0.124 0.059 0.024* 0.010* 0.000*
dm-std - 0.980 0.719 0.545 0.395 0.245 0.002*
dm-xtrm - - 0.906 0.739 0.603 0.450 0.010*
dm-ins - - - 0.966 0.935 0.829 0.085
cbr256 - - - - 0.738 0.935 0.174
abr224 - - - - - 0.919 0.303
r3mix - - - - - - 0.470
Sorry I didn't include your code, tangent, but I really only sort in one or two places and it wasn't going to save a lot of time to implement your quicksort. Plus I changed the sort routine a little to make it able to sort either from min to max or max to min.
ff123
Edit: It doesn't actually take too long to run a million trials now, so I did:
Adjusted p-values
dm-std dm-xtrm dm-ins cbr256 abr224 r3mix cbr192
mpc 0.690 0.452 0.130 0.061 0.027* 0.011* 0.000*
dm-std - 0.982 0.726 0.554 0.404 0.248 0.003*
dm-xtrm - - 0.906 0.747 0.608 0.456 0.012*
dm-ins - - - 0.968 0.936 0.831 0.088
cbr256 - - - - 0.742 0.934 0.180
abr224 - - - - - 0.922 0.311
r3mix - - - - - - 0.477