This question already has an answer here:

The Sort function will by default sort from lowest to highest.

In[1]:= Sort[{3, 1, 4}]
Out[1]= {1, 3, 4}

However, if the list contains non-numerical values, it will sort it incorrectly

In[2]:= zeroes = {2 Pi - 2 ArcTan[Sqrt[2 + Sqrt[5]]], 
   2 ArcTan[Sqrt[2 + Sqrt[5]]], 2 Pi + 2 ArcTan[Sqrt[2 + Sqrt[5]]]};

In[3]:= zeroes // N
Out[3]= {4.04615, 2.23704, 8.52022}

In[4]:= Sort[zeroes] // N
Out[4]= {4.04615, 2.23704, 8.52022}

One could use the Greater function as a parameter to Sort and then reverse the input

In[5]:= Reverse@Sort[zeroes, Greater] // N
Out[5]= {2.23704, 4.04615, 8.52022}

There is no Lesser function in Mathematica, but there must be a better way to do this, without converting the data to floats.


marked as duplicate by Mr.Wizard Mar 25 '15 at 10:05

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

  • 1
    $\begingroup$ This is shown in the last two examples under Scope on the manual page for Sort. $\endgroup$ – Michael E2 Mar 10 '14 at 10:20
  • $\begingroup$ As Michael E2 states, in the documentation. If you're trying to avoid conversion for say performance, makes no difference, when using e.g. Less on expressions, they're evaluated to numeric where possible. $\endgroup$ – ciao Mar 10 '14 at 10:37

The function Less is what you can use.

list = {2 Pi - 2 ArcTan[Sqrt[2 + Sqrt[5]]], 
   2 ArcTan[Sqrt[2 + Sqrt[5]]], 2 Pi + 2 ArcTan[Sqrt[2 + Sqrt[5]]]};
Sort[list, Less]


Sort[list, #1 < #2 &]

Or you could use:

SortBy[list, N@# &]
Sort[zeros// N]
(* {2.23704,4.04615,8.52022} *)

Mathematica is doing exactly what it should. You were sorting the expressions...

Ah, ninja'd... As ubpdqn posted, SortBy if you wish to sort (and keep form) of expressions by numeric value.

  • $\begingroup$ +1 not ninja'd...//N vs ,Less...you 'win' by 2 characters (3 if you count my unnecessary space), am ignoring the first argument :-) $\endgroup$ – ubpdqn Mar 10 '14 at 10:15
  • $\begingroup$ You're not answering the question which specifically asked for a solution without using conversion to floating point precision. $\endgroup$ – jVincent Mar 10 '14 at 10:16
  • $\begingroup$ @jVincent: not sure what your point (if any) is, I state quite clearly use of SortBy as also posted by ubodqn gives the expressions...not to mention the OP is quite ambiguous re: exactly what form of result is desired. $\endgroup$ – ciao Mar 10 '14 at 10:19

Not the answer you're looking for? Browse other questions tagged or ask your own question.