Algorithm Merge(left, right) result = [] while left and right are not empty: if left[0] <= right[0]: result.append(left[0]) left = left[1:] else: result.append(right[0]) right = right[1:]
result.extend(left if left is not empty else right) return result
d = min(distance(closest_left), distance(closest_right)) strip = [p for p in points if abs(p.x - points[mid].x) < d]
return min(d, closest_in_strip(strip, d))
Algorithm brute_force_closest_pair(points) min_dist = infinity closest_pair = None for i from 0 to length(points): for j from i+1 to length(points): if distance(points[i], points[j]) < min_dist: min_dist = distance(points[i], points[j]) closest_pair = (points[i], points[j]) return closest_pair
Algorithm closest_in_strip(strip, d) min_dist = d strip.sort_by_y() for i from 0 to length(strip): for j from i+1 to min(i+7, length(strip)): if distance(strip[i], strip[j]) < min_dist: min_dist = distance(strip[i], strip[j]) closest_pair = (strip[i], strip[j]) return closest_pair