Sorting speed improvement
stephane Petithomme
stephane at telesol.usm.my
Wed Apr 23 17:14:16 CEST 2003
On Wednesday 23 April 2003 16:16, Jaime Torres wrote:
> Hello,
>
> Yesterday I implemented an improved sorting algorithm (Postman Sort)
> in the
> QStringList class that I'm using right now. This algorithm is O(n) !!!!
>
> I have not measured the performance improvement because the
> implementation is not
> optimal at all and I am not very familiar with the QT classes.
>
> Anyway, this algorithm can be implemented in all the places that
> need sorting things, like the file lists, .......
>
> Here you are the implementation.
>
> Regards to everybody.
>
>
>
>
> void QStringList::sort()
> {
> // Very inneficient way of using the PostMan sort
> // But should be faster than the HeapSort, as it
> // as only O(n) complexity.
> // More information on http://postmansort.sourceforge.net (alpha and
> spanish)
> // Google using postman sort
>
> // Fist, to know to maximum length of the strings
> int max_len=0;
> for ( QStringList::ConstIterator it = begin(); it != end(); ++it )
> if ( (*it).length()>max_len )
> max_len=(*it).length();
>
> // The good implementation needs 256 intermedate lists.
> // But does not need to copy elements from list to list
> // It is enought to move them (in a list implemented with
> // pointers, just move the pointer ).
Unicode??? Should need 65536 list!
>
> // I'm doing this my first day with the QT classes.
> QStringList lst[256];
>
> for ( int i = max_len; i >0 ; i--)
> {
> // Split the list using the character in the specified
> position
> for ( QStringList::ConstIterator it = begin(); it != end();
> ++it )
> lst[(*it).at(i)].append(*it);
> // Join again the lists in the default
> clear();
> for ( int j = 0; j<256; j++)
> {
> // Reconstruct the original list
> // !!! There is no fast concat ????
> !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
> for ( QStringList::ConstIterator it =
> lst[j].begin(); it != lst[j].end(); ++it )
> append(*it);
> lst[j].clear();
> }
> }
> }
More information about the Kde-optimize
mailing list