Я подозреваю, что ваш преподаватель имеет в виду проблему пересечения сегментов линии , которая более сложна, чем простая сортировка сегментов. Вы заметите, что эта статья ссылается на алгоритм Shamos – Hoey, который использует двоичное дерево для хранения отрезков и эффективного обнаружения пересечений.
Майкл прав в том, что использование бинарного дерева бессмысленно для одноразового рода отрезков. Однако в контексте обнаружения пересечений сортировка, сопровождаемая поиском, даст квадратичную производительность и является не лучшим подходом, поэтому в алгоритмах обнаружения линий используются двоичные деревья.
Например, предположим, что вы сортируете свои отрезки по оси X слева направо. Тогда алгоритм наивного обнаружения будет выглядеть примерно так:
for (int i=0; i<segs.length - 1; ++i) {
boolean searching = true;
for (int j=i+1; j<segs.length && searching; ++j) {
if (segments overlap on x-axis) {
// Check for intersection.
} else {
// No overlap so terminate inner loop early.
// This is the advantage of having a sorted list.
searching = false;
}
}
}
Из-за двойного вложенного цикла наихудшим случаем является O (n ^ 2), который возникает, когда все сегменты линии перекрываются по оси x. Наилучший случай является линейным и возникает, когда ни один из сегментов не перекрывается по оси x.
Возможно, вы захотите начать с реализации наивного алгоритма, за которым следует алгоритм, использующий структуру B-дерева.