C++ Notes: Algorithms: Bubble Sorts
Bubble sort compares two values next to each other and exchanges them
if necessary to put them in the correct order. There are many variations on
bubble sort, but they all examine adjacent pairs.
Performance
Bubble sorts are O(N2) on the average (and worst),
but have O(N) best case performance.
The one efficient aspect of bubble sorts is that they can quit early if the
elements are almost sorted.
If you need a faster sort, use Quicksort (best O(log N), average O(log N),
worst O(N2)) or heap sort (best, average, and worst are all O(log N)) in the library.
Bubble Sort -- fixed number of passes
This version of bubble sort makes a fixed number of
passes (length of the array - 1). Each inner loop is
one shorter than the previous one because the largest
elements are being moved to the end of the array.
void bubbleSort1(int x[], int n) {
for (int pass=1; pass < n; pass++) { // count how many times
// This next loop becomes shorter and shorter
for (int i=0; i < n-pass; i++) {
if (x[i] > x[i+1]) {
// exchange elements
int temp = x[i]; x[i] = x[i+1]; x[i+1] = temp;
}
}
}
}
Because this version of the bubble sort always makes n-1 passes
over the array, it can't stop early
if the array is already sorted. See More Bubble Sorts
for improvements.
Students like bubble sorts -- could it be the name or the
intuitive algorithm? Instructors also like bubble sorts, perhaps
for the many interesting programming variations. However, the sad
truth is that they often aren't very efficient. They should only be used
with small arrays or almost sorted data.