I am not sure if this is the fastest way, but it works.
The whole idea is to connect the points using line segments that do not intersect (other than points, and it's a little harder to determine than you might think). So, start with the original unsorted list, connect them in order - forming a closed path that can have many intersections - and then eliminate the intersections one by one by changing the subsequences of the points in the list.
Suppose we start with [abcdefgh] and find that the edge bc intersects the edge gh. We undo the cg sequence to get a new list: [abgfedch]. Two ribs were removed and two new ones were created; the rest are undisturbed (although some of them have changed direction).
I could not find a case where this process will work forever (i.e. the list will return to its previous state), as well as proof that this cannot happen.
Beta source share