Input: a list P of points in the plane.
- Sort the points of P by x-coordinate (in case of a tie, sort by y-coordinate).
Sort the points of P by x-coordinate (in case of a tie, sort by y-coordinate).
- Initialize U and L as empty lists. The lists will hold the vertices of upper and lower hulls respectively.
Initialize U and L as empty lists. The lists will hold the vertices of upper and lower hulls respectively.
- for i = 1, 2, ..., n:
for i = 1, 2, ..., n:
while L contains at least two points and the sequence of last two points of L and the point P[i] does not make a counter-clockwise turn:
remove the last point from L
append P[i] to L
while L contains at least two points and the sequence of last two points of L and the point P[i] does not make a counter-clockwise turn:
remove the last point from L
append P[i] to L
- for i = n, n-1, ..., 1:
for i = n, n-1, ..., 1:
while U contains at least two points and the sequence of last two points of U and the point P[i] does not make a counter-clockwise turn:
remove the last point from U
append P[i] to U
while U contains at least two points and the sequence of last two points of U and the point P[i] does not make a counter-clockwise turn:
remove the last point from U
append P[i] to U
- Remove the last point of each list (it's the same as the first point of the other list).
Remove the last point of each list (it's the same as the first point of the other list).
- Concatenate L and U to obtain the convex hull of P. Points in the result will be listed in counter-clockwise order.
Concatenate L and U to obtain the convex hull of P. Points in the result will be listed in counter-clockwise order.