One D&C way that works in practice very well, but is not perfect, is as follows:
Pick a dividing median line (by taking a median of all the center points x values of all the rectangles). [The dividing median is a line parallel to y-axis.]
Divide the rectangles into 3 subsets:
Left - rectangles that are entirely to the left of dividing median // n1
Center - rectangles that overlap with the dividing median // n2
Right - rectangles that are entirely to the right of the dividing median. // n3
Obviously, the rectangles in Left and in Right can not overlap.
And the rectangles in Center already overlap along the x-axis, now we can simply check if they overlap along the y-axis. This can be done in O(n log n) as follows: Simply sort the rectangles (line intervals) in terms of y-axis. Iterate the list and compare the neighbors. Now, we observe that this can be done in O(n) time, if the rectangles are pre-sorted in terms of their y-axis once at the very beginning.
So, the recurrence relation basically becomes:
T(n) = O(n) + T(n1 + n2) + T(n2 + n3) + O(n2), where n1 + n2 + n3 is n.
If n2 is not too large, then this becomes O(n log n) algorithm.
If n2 is large, then the center part is pretty big, and we are likely to find an overlap there among center parts already.
So, this method is not guaranteed to be O(n log n), but it works in practice. For a cleverer algorithm, think of breaking the original set into 5 subsets on the basis of a central rectangle.