Bubble Sort

What is a Bubble Sort?

A bubble sort compares adjacent items e.g. 1 and 2, 2 and 3 etc. 

Bubble Sort Example - Cards

We will look at the following list of cards and perform 2 passes of a bubble sort algorithm. A reminder that  when performing a bubble sort a pass is one complete iteration through the list.

After 1 Pass

After 2 Passes

Bubble Sort Example

Algorithm - Fixed Loop Bubble Sort

A bubble sort can be implemented using a fixed loop or a conditional loop. We will look at the fixed loop implementation first.

Pseudocode - Fixed Loop Bubble Sort

What the outer loop (first loop) does is ensure that the place the new values in their correct position - the first value to be put in its final position will be a maximum of the length of the array - 2. 

There is a length -1 condition as remember that a loop of 5 items will have a length of 5 but a maximum index of 4 so the last two pairs we want to check are in position [3] and [4].  The outer loop will start at length - 2 and go to 0 in steps of -1.

The inner loop compares the two values in adjacent positions and if they are in the incorrect position then they are swapped - using a temporary variable to hold one of the values.

Python Implementation - Bubble Sort - Fixed Loops

Bubble Sort Example

How do we know if a list is sorted when using a bubble sort??

If we use the bubble sort algorithm below - when we would we know when the list of cards below are sorted if we are using the algorithm? 

Swaps are key

If we complete and entire pass through the array and compare the pairs of values making no swaps then we know that the list is sorted.

Bubble Sort - Conditional Loop

Bublle Sort - Conditional Loop (Python)

Swapping Parallel Arrays using Bubble Sort

We want to sort these two parallel arrays so that ages (and corresponding names) are in ascending order of age.

So we will run our algorithm below:

a problem...

Sorting Parallel Arrays

We will need to ensure that when we perform a swap that we swap the corresponding value in the other parallel array.

The elements in green will be swapped on the first iteration

Sorting Arrays of records

Similar to sorting parallel arrays but we are using the following record structure shown to the right

Our record structure

Our array of records

The highlighted Lines 13-15 ensure that we mimic the shifts in the second parallel array (names). 

If there were more than two parallel arrays then you would need to repeat this bold section for each parallel array used.

Sorting arrays of objects

Sorting arrays of objects are similar to sorting arrays of records except you must ensure that where applicable you use the appropriate getter method to access a relevant property. 

You will notice that is very similar to the algorithm for sorting the record of arrays.

This time we use the appropriate getter method e.g. getAge() in order to retrieve the appropriate value of an instance variable for use in the comparison.

Sorting 2D Arrays

Sorting by a column

You can apply any sort algorithm to a 2D array. If you consider that the following 2D array with names and 5 scores

We want to sort the score array into alphabetical order (first column)

Initial State

We want to sort the score array into alphabetical order (first column)


Goal state

The whole rows have now been swapped to their final position

Sorting by rows

We want to sort the scores in each row into ascending order

Initial State

We want to sort the scores in each row into ascending order

Goal state

We have sorted the scores in each row into ascending order