Re: Speeding up hierarchical sorting
- To: mathgroup at smc.vnet.net
- Subject: [mg34491] Re: [mg34455] Speeding up hierarchical sorting
- From: BobHanlon at aol.com
- Date: Thu, 23 May 2002 03:32:44 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
In a message dated 5/22/02 5:14:18 AM, johannes.ludsteck at wiwi.uni-regensburg.de writes: >I would like to sort a list of lists (of integers) >hierarchically. For example assume we have a list of >records with the sex (encoded as 0 = male, 1 = female), >number of childs and age of persons: > >{{0,0,15},{1,2,30},{0,0,10},{0,1,19},{1,3,65},...}. > >The task is to sort the dataset with respect to sex and >then to sort each subset of people with equal sex with >respect to the number of childs and so on... > >I have programmed a simple (recursive) function doing this. >HSort[m,si] takes a matrix m containing the records and >a list si containing the indices specifying the hierarchical >structure of the sorting procedure, i.e. if si = {1,3,2} then m is >first sorted with respect to the first elements, then >with respect to the third element and finally with respect to >the second element of the records. > >Here is the implementation. I have two problems with it: first it is >rather slow lst=Table[{Random[Integer], Random[Integer, {0,3}], Random[Integer, {25, 65}]}, {1000}]; colSort[lst_List, ci_Integer] := Sort[lst, #1[[ci]]<=#2[[ci]]&]; hSort[lst_List, si_?VectorQ] := Fold[colSort[#1, #2]&, lst, Reverse[si]]; Sort[lst] == hSort[lst, Range[3]]//Timing {0.27 Second, True} Bob Hanlon Chantilly, VA USA