/** * @file * @brief [Bubble sort](https://en.wikipedia.org/wiki/Bubble_sort) algorithm * implementation using recursion. */ #include #include #include #include #include /** * Swapped two numbers 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; } /** * Bubble sort algorithm implements using recursion * @param arr array to be sorted * @param size size of array */ void bubbleSort(int *arr, int size) { if (size == 1) { return; } bool swapped = false; for (int i = 0; i < size - 1; ++i) { if (arr[i] > arr[i + 1]) { swap(arr + i, arr + i + 1); swapped = true; } } if (swapped) { bubbleSort(arr, size - 1); } } /** * 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); } /** Driver Code */ int main() { /* Intializes random number generator */ srand(time(NULL)); test(); return 0; }