sjfp

🧩 Syntax:
#include <stdio.h>

void sjf(int at[], int bt[], int n)
{
    int process[n], ct[n], tat[n], wt[n], temp_bt[n - 1];
    float avg_tat = 0, avg_wt = 0, time = 0;

    // Initialize process array
    for (int i = 0; i < n; i++)
    {
        process[i] = i + 1; // Process numbering starts from 1
    }
    for (int i = 1; i < n; i++)
        temp_bt[i] = 0;

    for (int i = n - 1; i > 0; i--) // for finding the process at the first arrival time
    {
        if (at[i] < at[i - 1])
        {
            int temp = at[i];
            at[i] = at[i - 1];
            at[i - 1] = temp;

            temp = bt[i];
            bt[i] = bt[i - 1];
            bt[i - 1] = temp;

            temp = process[i];
            process[i] = process[i - 1];
            process[i - 1] = temp;
        }
    }

    time += bt[0];
    ct[0] = time;

    for (int i = 1; i < n; i++) // For sorting the burst time
    {
        for (int j = 1; j < n - i; j++)
        {
            if (bt[j] > bt[j + 1])
            {
                int temp = at[j];
                at[j] = at[j + 1];
                at[j + 1] = temp;

                temp = bt[j];
                bt[j] = bt[j + 1];
                bt[j + 1] = temp;

                temp = process[j];
                process[j] = process[j + 1];
                process[j + 1] = temp;
            }
        }
    }

    for (int j = 1; j < n; j++)
    {
        if (bt[j] == bt[j + 1]) // For finding the process when two burst times becomes equal
        {

            if (at[j] > at[j + 1])
            {
                int temp = at[j];
                at[j] = at[j + 1];
                at[j + 1] = temp;

                temp = bt[j];
                bt[j] = bt[j + 1];
                bt[j + 1] = temp;

                temp = process[j];
                process[j] = process[j + 1];
                process[j + 1] = temp;
            }
        }
    }

    for (int i = 1; i < n; i++)
    {
        for (int j = 1; j < n; j++)
        {
            if (at[j] <= time && temp_bt[j] == 0)
            {
                time += bt[j];
                ct[j] = time;
                tat[j] = ct[j] - at[j];
                wt[j] = tat[j] - bt[j];
                 
                temp_bt[j] = 1;
                break;
            }
        }
    }
    
    tat[0] = ct[0] - at[0];
    wt[0] = tat[0] - bt[0];
   

    // Print the result table
    printf("P\tAT\tBT\tCT\tTAT\tWT\n");
    for (int i = 0; i < n; i++)
    {
        printf("P%d\t%d\t%d\t%d\t%d\t%d\n", process[i], at[i], bt[i], ct[i], tat[i], wt[i]);
        avg_tat += tat[i];
        avg_wt += wt[i];
    }

    // Print average turnaround time and average waiting time
    printf("AVERAGE TURNAROUND TIME = %.2f\n", avg_tat / n);
    printf("AVERAGE WAITING TIME = %.2f\n", avg_wt / n);
}

int main()
{
    int n;
    printf("ENTER THE NUMBER OF PROCESSES:");
    scanf("%d", &n);
    int at[n], bt[n];

    for (int i = 0; i < n; i++)
    {
        printf("\nENTER THE ARRIVAL TIME OF PROCESS P%d:", i + 1);
        scanf("%d", &at[i]);
        printf("ENTER THE BURST TIME OF PROCESS P%d:", i + 1);
        scanf("%d", &bt[i]);
    }

    sjf(at, bt, n);
    return 0;
}