Skip to content

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)
Difficulty Advanced (index: 7 / 10)

Concepts

Beta Feature

This concept detection system is still in beta and may occasionally show incorrect or incomplete results.

  • Array
  • Pointers
  • Iteration
  • Sorting (possible)
  • Recursion

Actions

Raw View on GitHub

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;
}

Explanation

Explain with AI

Copy the prompt below and paste it into any AI assistant.

    You are explaining a C programming code to a beginner.

    STRICT RULES:

    - Only use the given code. Do NOT assume anything not present.

    - Do NOT add extra examples.

    - Keep explanation clear and short.

    - If something is unclear, say "Not clear from code".

    - Follow the exact format below. Do NOT change headings.

    FORMAT:

    [START]

    ## What it does

    (Explain the overall purpose in 1-2 sentences)

    ## Step-by-step

    (Explain how the code works in steps, simple language)

    ## Key Concepts

    (List concepts like loop, condition, function, etc.)

    ## Notes

    (Mention any limitations, errors, or assumptions)

    [END]

    CODE (KI003.c):

    #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)
                    {
                        pri
    ... (truncated for brevity)