sort functions in python
Steven D'Aprano
steve at REMOVE-THIS-cybersource.com.au
Sat Feb 9 20:42:53 EST 2008
On Sat, 09 Feb 2008 23:07:44 +0100, Hrvoje Niksic wrote:
> Steven D'Aprano <steve at REMOVE-THIS-cybersource.com.au> writes:
>
>> It depends on what you mean by "bubble sort". There are many different
>> variations of bubble sort, that are sometimes described by names such
>> as comb sort, cocktail sort, exchange sort, and sometimes merely
>> referred to bubble sort.
>
> I've never seen anything better than bubble sort being called bubble
> sort.
What, you didn't read the post you're replying to? There goes your
credibility, right out the window and accelerating fast. The very next
paragraph in my post said:
"I'm as guilty of that as anyone else -- the example code I posted,
raided from Wikibooks is very different from this bubble sort algorithm
from PlanetMath:"
So as you can see, there are at least two quite different sort
algorithms, with very different speeds and behaviours, and both are
called bubble sort by the people who put them on the web.
The Wikibooks version always makes the same number of passes over the
list, regardless of it's initial order. Even if the list is sorted, it
still walks over the list O(N**2) times, doing pointless comparisons over
and over again. It ends up doing a constant 1/2*N*(N-1) comparisons,
regardless of the state of the list, whether it is sorted, reversed or
something in between.
http://en.wikibooks.org/wiki/Algorithm_implementation/Sorting/Bubble_sort
The Planet Math version does not run a fixed number of times. If the list
is already sorted, it only walks it once, doing only (N-1) comparisons.
But if the list is far from sorted, it can end up doing N*(N-1)
comparisons.
http://planetmath.org/encyclopedia/Bubblesort.html
If we're going to call them both bubble sort, we might as well call
virtually any exchange sort (e.g. gnome sort, comb sort, cocktail sort,
insertion sort, etc.) "bubble sort". And that would be stupid.
Sure, they're all *similar* algorithms, with O(N**2) behaviour, but their
differences are significant: they differ in their best, worst and average
behaviour and the coefficient multiplier.
> Comb sort is definitely regarded as a different algorithm,
And so it should be.
> and cocktail sort is no better than bubble sort anyway.
Not according to Wikipedia:
http://en.wikipedia.org/wiki/Cocktail_sort
>> It's rather like any divide-and-conquer sorting algorithm being called
>> quicksort.
>
> Where have you seen this? I've never heard of non-quicksort
> divide-and-conquer algorithms (such as mergesort) being referred to as
> quicksort.
My apologies for not being more clear. What I meant was that lumping all
exchange-sorts (a family of algorithms) as "bubble sort" (a specific
example of the family) is as bogus as lumping all divide-and-conquer
algorithms together as "quicksort" would be, if anyone did it.
--
Steven
More information about the Python-list
mailing list