Describes the operation of optimized sorting algorithm bubblesort. The traditional bubblesort algorithm is also described. The time complexity is also described in detail. In the presentation, all content is provided with through examples.
5. tobiasstraub.com
Let's look
at the first two numbers
seqA = 6 | 8 | 10 | 3
6 8
Okay! Now the question is
Is the second number (8) smaller then
the first (6)? Answer: NO, it is not
7. tobiasstraub.com
Okay,
our seqA has not changed.
The next step is to perform the same
check again, but this time we move our
pointers around a number to the right
8. tobiasstraub.com
A number
to the right
seqA = 6 | 8 | 10 | 3
8 10
Okay! Now the question is again
Is the second number (10) smaller then
the first (8)? Answer: NO, it is not
11. tobiasstraub.com
A number
to the right
seqA = 6 | 8 | 10 | 3
10 3
Okay! Now the question is again
Is the second number (3) smaller then
the first (10)? Answer: YES, it is
14. tobiasstraub.com
What have we achieved?
The data sequence is now completely
pass through, so that the largest element
is at the end of the data sequence
15. tobiasstraub.com
Now what?
Now we pass through the sequence of
data once again, so that the second
largest number (8) is on the second last
position
At the last position of our data sequence
we have already the largest number (10)
16. tobiasstraub.com
How do we do that?
It's easy! - We take our previously sorted
data sequence and complete all the steps
again
17. tobiasstraub.com
Let's look
at the first two numbers
seqA = 6 | 8 | 3 | 10
6 8
Okay! Now the question is
Is the second number (8) smaller then
the first (6)? Answer: NO, it is not
20. tobiasstraub.com
A number
to the right
seqA = 6 | 8 | 3 | 10
8 3
Okay! Now the question is again
Is the second number (3) smaller then
the first (8)? Answer: YES, it is
22. tobiasstraub.com
Good,
the last number we may exclude from the
comparison.
We remember: In the first pass we have
already promoted the largest number to
the last position
23. tobiasstraub.com
What have we achieved?
The data sequence has now been rerun
completely, so that the second largest
number is at the second last position
of the data sequence
26. tobiasstraub.com
Let's look
at the first two numbers
seqA = 6 | 3 | 8 | 10
6 3
Okay! Now the question is
Is the second number (3) smaller then
the first (6)? Answer: YES, it is
28. tobiasstraub.com
Very well,
the second last and the last element we
may exclude from the comparison.
We remember: In the first and the second
pass we have already promoted the
largest number to the last position and the
second last number to the second last
position
32. tobiasstraub.com
In the traditional
version of the algorithm, all comparisons
are made for each run. It does not matter
whether the elements are already in the
correct position
36. tobiasstraub.com
worst case O(n²)
Okay, in the worst case, we need to
perform three comparisons, because
seqA has four elements 4 – 1 = 3 (n-1)
seqA = 6 | 8 | 10 | 3
1 : Compare 6 with 8
2 : Compare 8 with 10
3 : Compare 10 with 3
37. tobiasstraub.com
worst case O(n²)
So, now we have one number on the
desired position
The question we must ask ourselves
now is
How many times must we repeat
this procedure in the worst case, so that
all our numbers are in the correct
position?
39. tobiasstraub.com
worst case O(n²)
The O-notation for the worst case,
given by the number of passes
multiplied by the number of comparisons
(n-1) * (n-1) = O(n²)
Thus we have a quadratic term, which
makes the bubblesort algorithm with
increasing number of data extremely
inefficient
41. tobiasstraub.com
For example
We have the following data sequence
seqB = 3 | 6 | 8 | 10
We pass through the data sequence.
At the end of the pass we would notice
that there was no swapping. Thus, the
data sequence is already stored.
42. tobiasstraub.com
The big O
The O-notation for the best case,
given by the number of passes
multiplied by the number of comparisons
1 * (n-1)
44. tobiasstraub.com
As we know,
we can at eatch iteration of the data
sequence save one comparison
(namely comparison with the already
sorted number from the last run)
47. tobiasstraub.com
The O-notation
for the optimized algorithm,
thus obtained again by the number of
passes multiplied by the number of
comparisons
(n-1) * (n/2) = O(n²)
Thus we have again a quadratic term,
but in terms of the linear portion
(comparisons) much faster on the run time
50. tobiasstraub.com
Code? Now!
You can download the code discussed
here (Java)
Optimized Version
http://tobiasstraub.com/bubblesort-ex1
Traditional Version
http://tobiasstraub.com/bubblesort-ex2
51. tobiasstraub.com
About the Author
Tobias Straub is a Web and Mobile
Developer from Germany. Write an email to
talk with him or follow him on LinkedIn.
tobiasstraub.com/linkedin
hello@tobiasstraub.com
52. This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0
Unported License. To view a copy of this license, visit
http://creativecommons.org/licenses/by-nc-nd/3.0/.
Image sources
Page 1: Keith, http://www.flickr.com/photos/outofideas/
License