RE: sort list

• To: mathgroup at smc.vnet.net
• Subject: [mg47224] RE: [mg47208] sort list
• From: "E. Martin-Serrano \(Houston - USA\)" <eMartinSerrano at houston.rr.com>
• Date: Wed, 31 Mar 2004 02:58:11 -0500 (EST)
• Sender: owner-wri-mathgroup at wolfram.com

```Guido,

The first one sorts a table for any c-th column. It was once posted at
MathGroup.

(* 'CTableSort' sorts table (matrix t) for c-th column. *)

CTableSort[ t_?MatrixQ, col_Integer]/;col<=Dimensions[t][[2]]:=
Sort[t,#1[[col]]> #2[[col]]& ]

The second one (FTableSort) is a bit elaborated, and perhaps inefficient.
But for small to medium size tables is good enough to sort tables in full,
starting at a first column, then for the second...

(* 'FTableSort' sorts table (matrix t) for 1th column, then for 2th, ...
then for i-th column, ... and finally for n-th column. *)

FTableSort[t_?MatrixQ,c_:0]:=
Module[{col = c, pos = i = i1 = i2 = head = tsi = tb= {}, numcols =
Length[ First[t]]},
col++;
If[col\[Equal]1,tsf={}];
tsi=CTableSort[t,col];
If[Or [col \[Equal] numcols ,Length[tsi]\[Equal]1],AppendTo[tsf
,#]&/@tsi;Return[tsf]];
i= Transpose[Frequencies[Column[tsi,col]]//Reverse]//First;
i1 =FoldList[(#1+#2)&,1,Delete[i,-1]];
i2 =FoldList[(#1+#2)&,First[i],Rest[i]];
If[Length[pos]\[Equal] 1, postail = head,postail = Rest[pos]];
,First[tsi]];FTableSort[#,col]&/@(Take[tsi,#]&/@postail),FTableSort[#,col]&/
@(Take[tsi,#]&/@pos)];
tsf
];

Cheers,

Emilio

-----Original Message-----
From: Guibout [mailto:guibout at ifrance.com]
To: mathgroup at smc.vnet.net
Subject: [mg47224] [mg47208] sort list

Hi,
I have a list of the form
{{something1,x1},{something2,x2},{something3,x3}} where x1,x2, x3 are
numbers. I want to sort this list with respect to xi. In other word if
x2<x3<x1 I want Mathematica to produce:
{{something2,x2},{something3,x3},{something1,x1}}