234
 правки
Изменения
→Алгоритм QuickHull
Таким образом, наша оболочка совпадает с истинной, а значит алгоритм корректен.
== Реализация ==
Заметим, что длина высоты, опущенная из точки <tex>t</tex> на отрезок <tex>ab</tex>, пропорциональна векторному произведению <tex>[bt \cdot ba]</tex>, поэтому для сравнения можно использовать именно это.
== Псевдокод ==
Inplace-реализация алгоритма. <tex>S[1..n]</tex> - исходное множество. <tex>quick_hullquick\_hull()</tex> - рекурсивная функция, находящая оболочку подмножества <tex>S</tex>. В реализации в конце каждого подмножества находятся эл-ты, точно не принадлежащие оболочке.
 QuickHull(S)
   b = quick_hull(S, k + 1, n);
   swap(S[a..k], S[k + 1, b])
   return start + (a - 1) + (b - k - 1)<br/>
 quick_hull(S, start, end)
   find i such that S[i], S[start], S[end] has maximum value
   (a, b) = partition2(S, start, end, S[i]) //свапаем эл-ты S так, чтобы сначала были все эл-ты над прямой S[start]S[i], потом                S[i]S[end], потом все остальное
   c = quick_hull(S, start, a)
   d = quick_hull(S, a + 1, b)
