C Program: Bubble/Sinking Sort
Bubble Sort (or Sinking Sort) is a sorting agorithm which sorts numbers by repeatedly comparing two consecutive pair and swapping them if they are in incorrect order.
Consider the following unsorted set of numbers:
( 7 3 5 -9 )
We will illustrate the use of Bubble Sort to reorder them in ascending order, which will result in the set being sorted as follows.
( -9 3 5 7 )
First Iteration
The first number (from the left) is hooked. Comparison starts with the next adjacent number, and the next, till the last number is reached, exchanging places whenever the other number is smaller.
( 7 3 5 -9 ) → ( 3 7 5 -9 ), compare the first two elements; swaps since 7 > 3
( 3 7 5 -9 ) → ( 3 7 5 -9 ), no swap since 3 < 5
( 3 7 5 -9 ) → ( -9 7 5 3 ), swap since 3 > -9.
Second Iteration
The second number is fixed. Comparison starts with the next adjacent number till the last, exchanging places whenever the other number is smaller.
( -9 7 5 3 ) → ( -9 5 7 3 ), swap since 7 > 5
( -9 5 7 3 ) → ( -9 3 7 5 ), no swap since 5 > 3
Third Iteration
The third number is fixed. Comparison starts with the next adjacent number, which is the last. Since the other number is smaller, swapping takes place. This becomes the last iteration of the algorithm.
( -9 3 7 5 ) → ( -9 3 5 7 ), swap since 7 > 5
After this third iteration (which is based on the array size), we get our sorted array as:
( -9 3 5 7 )
The below C program illustrates the above sorting algorithm we performed.
The set ( -9 3 5 7 ) is assigned to the array numbers[]
of type int
. A third variable called temp
is also used to temporarily store assigned numbers while swapping.
#include <stdio.h>
int main() {
int numbers[] ={7,3,5,-9}, temp;
unsigned short int i, j, n;
// the size of given array
n = 4;
// bubble sort
for(i = 0; i < (n-1); i++) {
for(j = i+1; j < n; j++) {
if(numbers[i] > numbers[j]) {
temp = numbers[j];
numbers[j] = numbers[i];
numbers[i] = temp;
}
}
}
// printing the sorted array
for(i = 0; i < n; i++) {
printf("%d ", numbers[i]);
}
return 0;
}
With Array Input
Instead of feeding hard-coded set of numbers, we can enhance the above C program to read numbers dynamically. The size of the array numbers[]
is restricted to just 100, but there is a much better approach by using dynamic memory allocation, which we will cover in other example programs.
#include <stdio.h>
int main() {
int numbers[100], temp;
unsigned short int i, j, n;
printf("Enter the dimension of the array: ");
scanf("%hu", &n);
// array input
for(i = 0; i < n; i++) {
printf("Enter numbers[%hu]: ", i);
scanf("%d", &numbers[i]);
}
// bubble sort
for(i = 0; i < (n-1); i++) {
for(j = i+1; j < n; j++) {
if(numbers[i] > numbers[j]) {
temp = numbers[j];
numbers[j] = numbers[i];
numbers[i] = temp;
}
}
}
// printing the sorted array
for(i = 0; i < n; i++) {
printf("%d ", numbers[i]);
}
return 0;
}
Practically, Bubble Sort is not recommended for sorting. Insertion Sort, which has the same complexity order of $\text{O}(n^{2})$ as Bubble Sort, is much efficient when compared to it.