- int lastdist = INT_MAX;
- int dist = INT_MAX;
- int i = minp;
- do {
- lastdist = dist;
- dist = 0;
- for (int j = 0; j<ncrabs; j++) {
- int d = abs(crabs[j]-i);
- for (int k = 1; k<=d; k++)
- dist += k;
+ int middledist = INT_MAX;
+ int middle = (maxp+minp)/2;
+ while (middle != maxp && middle != minp) {
+ middledist = distance(crabs, ncrabs, middle);
+ if (distance(crabs, ncrabs, middle+1) > middledist) {
+ maxp = middle;
+ middle = (middle+minp)/2;
+ } else {
+ minp = middle;
+ middle = (middle+maxp)/2;