ID: 14591 Updated by: [EMAIL PROTECTED] Reported By: [EMAIL PROTECTED] Status: Closed Bug Type: Documentation problem Operating System: Linux/Windows PHP Version: 4.1.0 Assigned To: hholzgra New Comment:
Just thought I should shed some light on this. Quicksort will often change the order of equal elements, but qsort() on glibc and maybe others uses mergesort instead of quick- sort on small datasets, mergesort does not swap equal elements (I think). So at least on Linux, PHP would usually preserve the order of equal elements. Now PHP has it's own qsort() that is pure quicksort. Maybe we should have merge- sort too? Previous Comments: ------------------------------------------------------------------------ [2002-06-17 08:36:24] [EMAIL PROTECTED] documentation fixed in CVS ------------------------------------------------------------------------ [2002-06-17 08:24:09] [EMAIL PROTECTED] implementation and behaviour have changed but the sort result is still correct, even if it may be different to what you get with 4.0.6 or might expect to get on a first look there is no easy/efficient way to solve this issue with the quicksort algorithm and the documentation says: " The comparison function must return an integer less than, equal to, or greater than zero if the first argument is considered to be respectively less than, equal to, or greater than the second. If two members compare as equal, their order in the sorted array is undefined." i will add an additional warning regarding BC changed to "ducomentation problem" ------------------------------------------------------------------------ [2002-03-21 21:14:19] [EMAIL PROTECTED] I just want to report that the example code for the uasort function in the PHP manual does not work and nothing gets sorted.. I've tried for hours and using multiple books to get uasort to work with multidimensional associative arrays and I have had no success... Am I possibly printing out the arrays incorrectly?? This is what i Used to display the sorted array in the example in the PHP manual: for ( $row = 0; $row < 3; $row++ ) { while (list($key, value) = each ($array[ $row] ) ) { echo "|$value"; } echo "|<BR>"; } this can be the only possible thing I find that could be wrong.. if my code is not incorrect than this is a bug in the program.. ------------------------------------------------------------------------ [2001-12-19 05:19:40] [EMAIL PROTECTED] Hartmut, I don't agree with you at all. This is a major BC problem. If case you haven't checked , PHP 4.0.6 and prior version doesn't change the sort order. I'ld like to hear what sterling can tell us about this. Not bogus, Reopened. ------------------------------------------------------------------------ [2001-12-19 05:05:25] [EMAIL PROTECTED] well, you can't say that no sorting is needed in advance as uasort() does not know that your comparison function is going to return only zeros i'm not that deep into qsort implementations and, yes, i would expect qsort not to swap elements that are considered equal, but only for performance reasons ... (sterling might be able to tell you how and why zend_qsort does it internaly) besides that it is totaly ok that you get a different element order back as is still a valid order for your sort criteria good old "garbage in, garbage out" principle ;) ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/14591 -- Edit this bug report at http://bugs.php.net/?id=14591&edit=1