× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Dane Cox wrote:
I have a data structure array that I am sorting using qsort and I'm
observing some 'unintended' sorting going on and thought I'd see if
someone else has seen this.
My data structure array contains 9 fields, one of which is a status
field (1.0) which is what I am using to sort by...I want to see the
higher status' last. When I load up the ds array only two rows contain
a status other than 0. When qsort is called, the ds array comes back
with the higher status' last, however, those that have a status of zero
are also re-ordered amongst themselves. Does any body know why that is?
I would think that if there is no difference in the value of status,
then these would not be 'touched'.
...

I believe what you are seeing is a consequence of the fact that qsort() (normally) is not a "stable" sort. That is, elements with identical keys do not necessarily return in the same order as when they started. But you can change the comparison function to turn the sort into a "stable" sort:


    if element1.status < element2.status;
       return -1;
    elseif element1.status > element2.status;
       return 1;
    elseif %addr(element1) < %addr(element2);
       return -1;
    endif;
    return 1;

That is, for elements with identical keys, ensure that items already sorted lower remain lower.

Cheers! Hans


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.