Dan Kalowsky wrote: > Anyone able to confirm or deny the validity of this patch? > > > ---------- Forwarded message ---------- > > [2002-07-18 01:03:51] [EMAIL PROTECTED] > > The shuffle() function in the CVS is (still) broken. It does not > correctly generate all possible combinations of the array. (I know this > function was recently updated, this test is with new version.) > > Here is a diff to fix the problem: > > --- array.c Thu Jul 18 00:50:54 2002 > +++ array.new.c Thu Jul 18 00:49:35 2002 > @@ -1441,7 +1441,7 @@ > { > Bucket **elems, *temp; > HashTable *hash; > - int j, n_elems, cur_elem = 0, rnd_idx, n_left; > + int j, n_elems, rnd_idx, n_left; > > n_elems = zend_hash_num_elements(Z_ARRVAL_P(array)); > > @@ -1457,13 +1457,12 @@ > elems[j++] = temp; > while (--n_left) { > rnd_idx = php_rand(TSRMLS_C); > - RAND_RANGE(rnd_idx, cur_elem, n_left, PHP_RAND_MAX); > - if (rnd_idx != cur_elem) { > - temp = elems[cur_elem]; > - elems[cur_elem] = elems[rnd_idx]; > + RAND_RANGE(rnd_idx, 0, n_left, PHP_RAND_MAX); > + if (rnd_idx != n_left) { > + temp = elems[n_left]; > + elems[n_left] = elems[rnd_idx]; > elems[rnd_idx] = temp; > } > - cur_elem++; > } > > HANDLE_BLOCK_INTERRUPTIONS(); >
I've send the message to Dan, already. Just posting php-dev again. Top elements have more chance than end elements. All elements should have equal chance to be shuffled. -- Yasuo Ohgaki -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php