|
Boost : |
Subject: Re: [boost] [iterator] std::sort on zip_iterator (repost)
From: Edouard A. (edouard_at_[hidden])
Date: 2009-05-09 14:20:20
> You'd have to use a specialized sorting algorithm that does not
> dereference
> any elements and does not use std::swap. To make it as general as
> possible,
> I think it would be best to define a simple_sort that works on
> bidirectional
> iterators and lets the user override the swap method to allow tuple
> swapping, for example. The idea is a fallback sort that can sort
> almost any
> sortable data structure, though not necessarily at optimal speed.
> You're welcome to write this yourself, possibly using the quicksort
> part of
> the STL introsort definition, or you could wait for me to write it,
> which I
> should eventually get to.
Quick/introsort requires a random access iterator, if you only have
bidirectional iterators, merge sort is more appropriate.
It's very easy to implement using std::merge (or std::inplace_merge for a
speed/memory tradeoff) :
- If the list is small (below 30 ?)
- use insert_sort
- else
- Part the list in two at the middle
- Call merge sort on each part (recursion here)
- std::merge (or std::inplace_merge) the two resulting lists
-- EA
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk