RE: Re: Friendly Challenge 2: sort by column
- To: mathgroup at smc.vnet.net
- Subject: [mg35062] RE: [mg35029] Re: [mg35005] Friendly Challenge 2: sort by column
- From: "DrBob" <majort at cox-internet.com>
- Date: Thu, 20 Jun 2002 23:55:30 -0400 (EDT)
- Reply-to: <drbob at bigfoot.com>
- Sender: owner-wri-mathgroup at wolfram.com
What do you mean by handling duplicates? I THINK you mean keeping in their preexisting order any rows that agree in the column you're sorting by. Your concern with the issue implies that Ordering doesn't preserve existing order. That's to be expected, I suppose, since preserving order takes extra time and/or space -- but DOCUMENTATION SHOULD MAKE THIS CLEAR from the start. It's not always important for Sort (depending on the sort function), but it's obviously important for Ordering. Bobby -----Original Message----- From: "Mr. Wizard" [mailto:gleam at flashmail.com] To: mathgroup at smc.vnet.net Subject: [mg35062] [mg35029] Re: [mg35005] Friendly Challenge 2: sort by column > consequently I should add > > (5) > > a[[Ordering[a[[All, 3]]]]] Hartmut Wolf, thank you for participating in this challenge. Your #5 is one of the algorithms I'm using. It's the fastest I've found for sorting by one column only, disregarding the rest. After moderate number of tests, not nearly up to your standards, but enough to get a good start, I am prepared to observe that of your functions that handle duplicates by using Rotate, your function #2 is fastest. (Incidentally, this is the duplicate handling method I first chose, and still prefer.) I have a function that, on my machine, is usually faster than #2, sometimes considerably. I have a feeling you can best it if you try. Examples: hw2[a_,p_]:=RotateRight[Sort[RotateLeft[a,{0,p-1}]],{0,p-1}] sort3[a_,p_]:= ??? (my function) In[284]:= a = Table[Random[Integer, {0, 255}], {37}, {50}]; First@Timing[Do[a~#~i, {i, 2, 50}]~Do~{70}] & /@ {sort3, hw2} Out[285]= {1.54 Second, 1.86 Second} In[286]:= a = Table[Random[], {500}, {300}]; First@Timing[Do[a~#~i, {i, 2, 299, 11}]] & /@ {sort3, hw2} Out[287]= {1.16 Second, 2.2 Second} Regards, Paul