min = dist(p[0], p[1]);
for(i = 0; i < NUM; i++) for(j = i + 1; j < NUM; j++) if(min > dist(p[i], p[j])) min = dist(p[i], p[j]);
の方が無駄な比較は少ない

もっと言えば
for(i = 0; i < NUM; i++) for(j = i + 1; j < NUM; j++) {
double temp = dist(p[i], p[j]);
if(min > temp) min = temp;
}
にして無駄な関数呼び出しも減らしたい