[Tutor] bubble sort function
s.charonis at gmail.com
Sat Nov 15 20:34:43 CET 2014
Thank you Alan,
When I initiated the loop with the condition:
for i in range(len(unsorted)):
Python raised an IndexError saying I had gone out of bounds. Hence the
for i in range(0, size)
Yes, I actually the loop only consists of:
while unsorted[i] > unsorted[i+1]:
# Use a tuple assignment in order to swap the value of two variables
unsorted[i], unsorted[i+1] = unsorted[i+1], unsorted[i]
iterations += 1
Sorry about that. the *iterations* update and sorted_vec assignment are
outside of the loop body.
This is indeed just a learning exercise, I am aware that lists have sort()
and reverse() methods. I'm in the process of learning a bit about data
structures & algorithms using Python as my implementation language.
On Sat, Nov 15, 2014 at 7:02 PM, Alan Gauld <alan.gauld at btinternet.com>
> On 15/11/14 16:46, Spyros Charonis wrote:
> def bubble_sort_ascending(unsorted):
>> iterations = 0
>> size = len(unsorted) - int(1)
> Don't convert 1 to an int - it already is.
> for i in range(0, size):
> This will result in 'i' going from zero to len()-2.
> Is that what you want?
> unsorted[i] = float(unsorted[i])
> Comparing ints to floats or even comparing two floats
> is notoriously error prone due to the imprecision of
> floating point representation. You probably don't want
> to do the conversion.
> And if you must do it, why do you only do it once,
> outside the while loop?
> while unsorted[i] > unsorted[i+1]:
>> unsorted[i], unsorted[i+1] = unsorted[i+1], unsorted[i]
>> iterations += 1
> I assume you intended to end the loop body here?
> But the following lines are indented so are included
> in the loop.
> Also because you never change 'i' the loop can only
> ever run once. So really you could use a an if
> statement instead of the while loop?
> Finally, iterations is really counting swaps. Is that what you want it to
> count or os it actually loop iterations? If so which? The for loop or the
> while loop or the sum of both?
> sorted_vec = unsorted[:]
>> print "\nIterations completed: %s\n" %(iterations)
>> return sorted_vec
> Since you never alter sorted_vec there is no point in creating it.
> Just return unsorted - which is now sorted...
> and I have to call it again for the the sorting operation to complete.
>> Is there something I am missing in my code? Why does it not sort the
>> entire list at once and just count all completed iterations?
> There are several things missing or broken, the few I've pointed
> out above will help but the algorithm seems suspect to me. You need
> to revisit the core algorithm I suspect.
> BTW I assume this is just a learning exercise since the default
> sorting algorithm will virtually always be better than bubble
> sort for any real work!
> Alan G
> Author of the Learn to Program web site
> Tutor maillist - Tutor at python.org
> To unsubscribe or change subscription options:
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Tutor