ki003.c¶
Problem Statement
Bubble sort (with swap)
Metadata¶
| Property | Detail |
|---|---|
| Author | Amit Dutta amitdutta4255@gmail.com |
| Date | 24 Dec 2025 |
| License | MIT License (See the LICENSE file for details) |
Actions¶
💡 You can print or save this file by opening Raw and using your browser.
Source Code¶
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
void inputarr(int **, int);
void display(int[], int);
int asort(int *, int);
int dsort(int *, int);
int main()
{
int *arr = NULL, n, choice;
do
{
printf("\nEnter element count: ");
if (scanf("%d", &n) != 1 || n < 1)
{
printf("\nERROR: Invalid element count!!! Try again...");
}
else
{
break;
}
} while (true);
inputarr(&arr, n);
while (true)
{
printf("\n1. Sort in Ascending Order."
"\n2. Sort in Descending Order"
"\n3. Change Input"
"\n0. Exit"
"\nYour choice: ");
do
{
if (scanf("%d", &choice) != 1)
{
printf("\nInvalid Choice!!! Try again...");
while (getchar() != '\n')
;
}
else
{
break;
}
} while (true);
switch (choice)
{
case 1:
printf("\n === Selected Mode: Ascending Order ===\n");
if (!asort(arr, n))
{
printf("\nElements are already sorted.\n");
display(arr, n);
}
printf("\n");
break;
case 2:
printf("\n === Selected Mode: Descending Order ===\n");
if (!dsort(arr, n))
{
printf("\nElements are already sorted.\n");
display(arr, n);
}
printf("\n");
break;
case 3:
do
{
printf("\nEnter element count: ");
if (scanf("%d", &n) != 1 || n < 1)
{
printf("\nERROR: Invalid element count!!! Try again...");
}
else
{
break;
}
} while (true);
free(arr);
inputarr(&arr, n);
break;
case 0:
printf("\nExiting Program...\n");
free(arr);
return 0;
default:
printf("\nInvalid Choice!!! Try again...");
}
}
}
void inputarr(int **arr, int n)
{
int i;
if (n < 1)
{
printf("\nInvalid element number.");
return;
}
*arr = (int *)malloc(n * sizeof(int));
if (*arr == NULL)
{
printf("\nERROR: Memory Allocation falied.\nExiting Program...\n");
exit(1);
}
for (i = 0; i < n; i++)
{
printf("Enter Element %d: ", i + 1);
scanf("%d", &((*arr)[i]));
}
}
void display(int arr[], int n)
{
int i;
printf("[");
for (i = 0; i < n; i++)
{
printf("%d", arr[i]);
if (i != n - 1)
{
printf(", ");
}
}
printf("]");
}
int asort(int *arr, int n)
{
bool isSwaped = true;
int i, j, tempNum, swapCount = 0;
int *temp = (int *)malloc(n * sizeof(int));
if (temp == NULL)
{
printf("\nERROR: Memory Allocation falied.\nExiting Program...\n");
free(arr);
exit(1);
}
for (i = 0; i < n; i++)
{
temp[i] = *(arr + i);
}
for (i = 0; i < n - 1 && isSwaped == true; i++)
{
isSwaped = false;
for (j = 0; j < n - i - 1; j++)
{
if (temp[j] > temp[j + 1])
{
tempNum = temp[j];
temp[j] = temp[j + 1];
temp[j + 1] = tempNum;
isSwaped = true;
swapCount++;
}
}
}
if (swapCount > 0)
{
display(temp, n);
}
free(temp);
return swapCount;
}
int dsort(int *arr, int n)
{
bool isSwaped = true;
int i, j, tempNum, swapCount = 0;
int *temp = (int *)malloc(n * sizeof(int));
if (temp == NULL)
{
printf("\nERROR: Memory Allocation falied.\nExiting Program...\n");
free(arr);
exit(1);
}
for (i = 0; i < n; i++)
{
temp[i] = *(arr + i);
}
for (i = 0; i < n - 1 && isSwaped == true; i++)
{
isSwaped = false;
for (j = 0; j < n - i - 1; j++)
{
if (temp[j] < temp[j + 1])
{
tempNum = temp[j];
temp[j] = temp[j + 1];
temp[j + 1] = tempNum;
isSwaped = true;
swapCount++;
}
}
}
if (swapCount > 0)
{
display(temp, n);
}
free(temp);
return swapCount;
}