diff --git a/Competitive Coding/Sorting/Bubble Sort/bubble_sort.c b/Competitive Coding/Sorting/Bubble Sort/bubble_sort.c
index 8f47b721f..af0f6d1e1 100644
--- a/Competitive Coding/Sorting/Bubble Sort/bubble_sort.c	
+++ b/Competitive Coding/Sorting/Bubble Sort/bubble_sort.c	
@@ -1,46 +1,67 @@
+#include <stdio.h>
 
-// BUBBLE SORT
+void swap (int array[], int j){
+  int aux = 0;
+  aux = array[j]; 
+  array[j] = array[j+1]; 
+  array[j+1] = aux;
+}
 
-#include <stdio.h>
+void bubbleSort(int array[], int size, int order){
+  if(order == 1){
+    for(int i=0; i < size-1; i++){
+      int flag = 0;
 
-void swap(int*,int*);
-
-void bubblesort(int arr[], int size)
-{
-    int i, j;
-    for (i = 0;  i < size - 1; i++)     //  Function where the actual algorithm is implemented
-    {
-        for (j = 0; j < size - i - 1; j++)
-        {
-            if (arr[j] > arr[j+1])
-                swap(&arr[j], &arr[j+1]);
- 
+      for(int j=0; j<size-1-i; j++){
+        if(array[j] > array[j+1]){
+          swap(array, j);
+          flag = 1;
         }
+      }
+      if(flag == 0){
+        break;
+      }
     }
+  }
+
+  else if(order == 2){
+    for(int i=0; i < size-1; i++){
+      int flag = 0;
+
+      for(int j=0; j<size-1-i; j++){
+        if(array[j] < array[j+1]){
+          swap(array, j);
+          flag = 1;
+        }
+      }
+      if(flag == 0){
+        break;
+      }
+    }
+  }
 }
-void swap(int *a, int *b)
-{
-    int temp;                         // Function for swapping two variables
-    temp = *a;
-    *a = *b;
-    *b = temp;
-}
-int main()
-{
-    int array[100], i, size;
-    printf("How many numbers you want to sort:  ");  // Enter the numbers to sort
-    
-    scanf("%d", &size);
-    
-    printf("\nEnter %d numbers : ", size);
-    for (i = 0; i < size; i++)
-        scanf("%d", &array[i]);
-    bubblesort(array, size);
-    printf("\nSorted array is ");
- 
-    for (i = 0; i < size; i++)
-        printf(" %d ", array[i]);
-    printf(" ");
-    return 0;
- 
+int main() {
+  int size;
+  int order;
+
+  printf("Enter the size of the array:\n");
+	scanf("%i", &size);
+
+	int array[size];
+
+	printf("Enter the elements of the array:\n");
+	for(int i = 0; i < size; i++){
+	  scanf("%i", &array[i]);
+  }
+
+  printf("What type of ordering do you want: \n 1 - Ascending \n 2 - Descending\n");
+  scanf("%i", &order);
+
+	bubbleSort(array, size, order);
+
+	printf("The sorted array is:\n");
+	for (int i = 0; i < size; i++){
+    printf("%i ", array[i]);
+  }
+  return 0;
 }