Tutorial:Advanced List Sorting

From GeoGebra Manual
Revision as of 17:45, 8 April 2012 by Florian Sonner (talk | contribs) (Created page with "If you want to sort a list of objects in GeoGebra it is not unlikely that the kind of sorting you want is not possible with the Sort command. (If you just want t...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

If you want to sort a list of objects in GeoGebra it is not unlikely that the kind of sorting you want is not possible with the Sort command. (If you just want to inverse the results you can use Sort[] together with Reverse[]).

But in case the kind of object is not supported by Sort[] or you want a completely different sorting criterion this tutorial may help you with your task. If you're having problem with the algorithm you can read the explanation and examples below.

Algorithm

  1. Let list be the list we want to sort.
  2. list_h = Sort[Sequence[(*number based upon Element[list, i]*, i), i, 1, Length[list]]]
    This corresponds to c in the explanation (the helper list). The bold section is called f in the explanation.
  3. list_s = Sequence[Element[list, y(Element[list_h, i])], i, 1, Length[list]]
    This is the sorted list.

Explanation

To clarify the situation let us try to formulate the task mathematically: Given a list (a_1, a_2, \ldots, a_n) \subset X and a mapping f: X \to \mathbb R we want to find a permutation \sigma \in S_n such that f(a_{\sigma(k)}) \leq f(a_{\sigma(l)}) \; \forall (k,l) \in \mathbb N^2: 1 \leq k \leq l \leq n. You can think of the permutation \sigma as a renumbering such that (a_{\sigma(1)}, a_{\sigma(2)}, \ldots, a_{\sigma(n)}) will be the sorted list.

So we first have to come up with a mapping f for the correct sorting, for example:

Example: If want to sort a list of points such that their distance to the origin is increasing we have X := \mathbb R^2 and f((x,y)) := \sqrt{x^2 + y^2}. In GeoGebra f for a point A would be Distance[A], so the bold section in the algorithm would read Distance[Element[list,i]].
Example: If want to sort a list of circles such that their radius is increasing teh bold section in the algorithm would read Radius[Element[list,i]].
Example: A complete construction to sort a list of complex numbers by their argument can be found on GeoGebra: http://www.geogebra.org/material/show/id/7518

The trick to solve this problem in GeoGebra is to use the existing command to sort a list of points. Instead of thinking of points geometrically we think of those just as pairs of numbers. GeoGebra allows us to sort those points by their x-coordinates, so we create a list of points \tilde c = (\tilde c_1, \ldots, \tilde c_n) with \tilde c_k := (f(a_k), k) and sort this list. Let's call the sorted list c = (c_1, \ldots, c_n). This sorted list now allows us to construct \sigma, because y(c_{\sigma(k)}) = k. Using \sigma we can then construct the sorted version of our original list.

© 2021 International GeoGebra Institute