Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
98 changes: 16 additions & 82 deletions sorting/bubble_sort.c
Original file line number Diff line number Diff line change
@@ -1,95 +1,29 @@
/**
* @file
* @brief [Bubble sort](https://en.wikipedia.org/wiki/Bubble_sort) algorithm
* implementation
*/
#include <assert.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/**
* Display elements of array
* @param arr array to be display
* @param n length of array
*/
void display(const int *arr, int n)
int main()
{
for (int i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}

/**
* Swap two values by using pointer
* @param first first pointer of first number
* @param second second pointer of second number
*/
void swap(int *first, int *second)
{
int temp = *first;
*first = *second;
*second = temp;
}
#define SIZE 5 // defining a macro of definite size
int arr[SIZE] = {3,6,2,7,1}; // taking a demo array

/**
* Bubble sort algorithm implementation
* @param arr array to be sorted
* @param size size of array
*/
void bubbleSort(int *arr, int size)
//Bubble Sort Algorithm
for(int i = 0 ; i < SIZE - 1 ; i++) //loop till SIZE - 1 index
{
for (int i = 0; i < size - 1; i++)
{ /* for each array index */
bool swapped = false; /* flag to check if any changes had to be made */
/* perform iterations until no more changes were made or outer loop
executed for all array indices */
for (int j = 0; j < size - 1 - i; j++)
{ /* for each element in the array */
if (arr[j] > arr[j + 1])
{ /* if the order of successive elements needs update */
swap(&arr[j], &arr[j + 1]);
swapped = true; /* set flag */
}
}
if (!swapped)
for(int j = 0 ; j < SIZE -i - 1 ; j++) //loop till SIZE of array - i -1 index
{
if(arr[j] > arr[j + 1]) //comparing j and j+1 element
{
/* since no more updates we made, the array is already sorted
this is an optimization for early termination */
break;
int temp = arr[j]; //swapping using a temporary(temp) variable
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}

/**
* Test function
*/
void test()
{
const int size = 10;
int *arr = (int *)calloc(size, sizeof(int));

/* generate size random numbers from 0 to 100 */
for (int i = 0; i < size; i++)
{
arr[i] = rand() % 100;
}
bubbleSort(arr, size);
for (int i = 0; i < size - 1; ++i)
{
assert(arr[i] <= arr[i + 1]);
}
free(arr);
for(int i = 0; i < SIZE; i++) // Printing the array using for loop.
{
printf("%d ", arr[i]);
}

/** Driver Code */
int main(int argc, const char *argv[])
{
/* Intializes random number generator */
srand(time(NULL));
test();
return 0;
return 0;

}