I've got a collection of 10000 - 100000 spheres, and I need to find the ones farthest apart. 

One simple way to do this is to simply compare all the spheres to each other and store the biggest distance, but this feels like a real resource hog of an algorithm.

The Spheres are stored in the following way:

```
Sphere (float x, float y, float z, float radius);

```

The method Sphere::distanceTo(Sphere &s) returns the distance between the two center points of the spheres.

Example:

```
Sphere *spheres;
float biggestDistance;

for (int i = 0; i < nOfSpheres; i++) {
    for (int j = 0; j < nOfSpheres; j++) {
        if (spheres[i].distanceTo(spheres[j]) > biggestDistance) {
            biggestDistance = spheres[i].distanceTo(spheres[j]) > biggestDistance;
        }
    }
}

```

What I'm looking for is an algorithm that somehow loops through all the possible combinations in a smarter way, if there is any.

The project is written in C++ (which it has to be), so any solutions that *only* work in languages other than C/C++ are of less interest.