[vox-tech] shuffling arrays in C?

Alexandra Thorn vox-tech@lists.lugod.org
Mon, 25 Nov 2002 16:38:01 -0800 (PST)


On Mon, 25 Nov 2002, Bill Kendrick wrote:
> On Mon, Nov 25, 2002 at 03:56:58PM -0800, Alexandra Thorn wrote:
> > >       const int selection_size = ELEMS_IN_ARY(your_array) - (i + 1);
> > >       int selected_card = (i + 1)  /* don't include the already selected
> > >                                       cards, or the card to swap with */
> > >           + (int)((selection_size*1.0*rand())/(RAND_MAX+1.0)) /* see
> > > rand(3) */
> >
> > Micah, could you explain how/why this would work?  It doesn't seem
> > intuitively obvious, and I prefer not to use code that I don't understand.
>
> Say you're on the 3rd card.  What he's doing is making sure
> he doesn't pick card 1, 2 or 3 (i.e., itself) as the card to swap with.

Ah.  I see it now.  Thanks for the clarification, Bill.  Really helps to
realize that it is meant to exclude values lower than the card in question
as well as the card itself.  Don't know what I was thinking earlier.

Cheers :)
Alex