- int mindist = INT_MAX;
- for (int i = minp; i<=maxp; i++) {
- int dist = 0;
- for (int j = 0; j<ncrabs; j++)
- dist += abs(crabs[j]-i);
- if (dist < mindist)
- mindist = dist;
+ 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;
+ }