how to be as efficient as Sort[list] when list is {{x1,y1},{x2,y2},...}
- To: mathgroup at smc.vnet.net
- Subject: [mg31400] how to be as efficient as Sort[list] when list is {{x1,y1},{x2,y2},...}
- From: "Matthew D. Langston" <langston at SLAC.Stanford.EDU>
- Date: Wed, 31 Oct 2001 19:59:36 -0500 (EST)
- Organization: Stanford Linear Accelerator Center
- Sender: owner-wri-mathgroup at wolfram.com
How can I write an ordering function that is as efficient as the default function used by the Mathematica 4.1 version of Sort[]. I ultimately need to sort a list of values of the form {{x1,y1},{x2,y2},...} where I only need to sort on the x values while maintining the pairs of values. I benchmarked a few different methods I could think of, and all of them pale in comparison to the algorithm built into Mathematica 4.1. First, I generated a list of 100,000 random numbers: numberList = Table[Random[], {100000}]; Shallow[numberList] {0.625332, 0.106747, 0.0539789, 0.361381, 0.669647, 0.742005, 0.765696, 0.10016, 0.296304, 0.200155, <<99990>>} Then I tried the sorting algorithm built into Mathematica 4.1: {sort1Time, sort1} = Sort[numberList] // Timing; sort1Time 0.22 Second Pretty darned fast. Next I tried the simplest ordering function I could think of, which came out to be about 2 orders of magnitude slower than the default algorithm: {sort2Time, sort2} = Sort[numberList, #1 < #2 &] // Timing; sort2Time 20.419 Second According to Mathematica Help, the default ordering function for Sort[] is OrderedQ[{#1,#2}]&, so I tried it thinking that I would get a time comparable to the default algorithm, but it too came out to be about 2 orders of magnitude slower than the default algorithm: {sort3Time, sort3} = Sort[numberList, OrderedQ[{#1, #2}] &] // Timing; sort3Time 18.577 Second Can I sort a simple list of Reals any faster than this? If so, is there anything special I need to do when I move to my list of pairs? I am currently doing something like the following, which is just too slow: Sort[{{x1,y1},{x2,y2},...} , OrderedQ[{#1[[1]], #2[[1]]}] &] Thank you for pondering my questions. Regards, Matt -- Matthew D. Langston SLD, Stanford Linear Accelerator Center langston at SLAC.Stanford.EDU