From 825ac8eca8e384d6ad2538b5670088c31e08a9d7 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Thu, 14 Jan 2021 13:26:55 -0300 Subject: Corrected documentation for 'table.sort' The sort function must define a (strict) weak order for a correct sorting. A partial order is not enough. --- manual/manual.of | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/manual/manual.of b/manual/manual.of index 09297a63..2fe332a4 100644 --- a/manual/manual.of +++ b/manual/manual.of @@ -7821,19 +7821,19 @@ from @T{list[1]} to @T{list[#list]}. If @id{comp} is given, then it must be a function that receives two list elements and returns true when the first element must come -before the second in the final order -(so that, after the sort, -@T{i < j} implies @T{not comp(list[j],list[i])}). +before the second in the final order, +so that, after the sort, +@T{i <= j} implies @T{not comp(list[j],list[i])}. If @id{comp} is not given, then the standard Lua operator @T{<} is used instead. -Note that the @id{comp} function must define -a strict partial order over the elements in the list; -that is, it must be asymmetric and transitive. -Otherwise, no valid sort may be possible. +The @id{comp} function must define a consistent order; +more formally, the function must define a strict weak order. +(A weak order is similar to a total order, +but it can equate different elements for comparison purposes.) The sort algorithm is not stable: -elements considered equal by the given order +Different elements considered equal by the given order may have their relative positions changed by the sort. } -- cgit v1.2.3-55-g6feb